diff --git a/zabbix-ansible/hosts b/zabbix-ansible/hosts index 035d0f5..9459073 100644 --- a/zabbix-ansible/hosts +++ b/zabbix-ansible/hosts @@ -1,22 +1,22 @@ [server] -192.168.96.234 +192.168.96.168 [database] -192.168.96.234 +192.168.96.168 [zabbix-server:children] server database [zabbix-server:vars] -dbHost=192.168.96.234 +dbHost=192.168.96.168 dbUser=remote dbPassword=123456 dbName=zabbix [agent] -192.168.96.234 Hostname=zabbix-agent -192.168.96.235 Hostname=zabbix-agent +192.168.96.168 Hostname=zabbix-agent +192.168.96.169 Hostname=zabbix-agent [agent:vars] -serverHost=192.168.96.234 +serverHost=192.168.96.168 diff --git a/zabbix-ansible/zabbix-agentd/files/zabbix_agentd.d/redis.conf b/zabbix-ansible/zabbix-agentd/files/zabbix_agentd.d/redis.conf new file mode 100644 index 0000000..eb46f03 --- /dev/null +++ b/zabbix-ansible/zabbix-agentd/files/zabbix_agentd.d/redis.conf @@ -0,0 +1,2 @@ + +UserParameter=redischeck.mode[*],redis-cli info | awk -F ':' '/^$1/{print $$2}' \ No newline at end of file diff --git a/zabbix-ansible/zabbix-agentd/templates/zabbix_agentd.conf.j2 b/zabbix-ansible/zabbix-agentd/templates/zabbix_agentd.conf.j2 index d437918..be0547f 100644 --- a/zabbix-ansible/zabbix-agentd/templates/zabbix_agentd.conf.j2 +++ b/zabbix-ansible/zabbix-agentd/templates/zabbix_agentd.conf.j2 @@ -7,6 +7,8 @@ Hostname={{ Hostname }} ListenPort=10050 ListenIP=0.0.0.0 StartAgents=3 +EnableRemoteCommands=1 +LogRemoteCommands=1 PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 diff --git a/zabbix-ansible/zabbix-server/tasks/main.yml b/zabbix-ansible/zabbix-server/tasks/main.yml index c75d11b..89d2b7a 100644 --- a/zabbix-ansible/zabbix-server/tasks/main.yml +++ b/zabbix-ansible/zabbix-server/tasks/main.yml @@ -10,7 +10,7 @@ yum: name=zabbix-agent,zabbix-get,zabbix-sender,zabbix-server-mysql state=present - name: input zabbix-server {{ zabbixServerLevel }} data - shell: zcat /usr/share/doc/zabbix-server-mysql-{{ zabbixServerLevel }}*/create.sql.gz | mysql -u{{ dbUser }} -p{{ dbPassword }} -h {{ database }} {{ dbName }} + shell: mysql -u{{ dbUser }} -p{{ dbPassword }} -h {{ database }} -e "drop database if exists {{ dbName }};create database if not exists {{ dbName }} character set utf8 collate utf8_bin" && zcat /usr/share/doc/zabbix-server-mysql-{{ zabbixServerLevel }}*/create.sql.gz | mysql -u{{ dbUser }} -p{{ dbPassword }} -h {{ database }} {{ dbName }} - name: copy zabbix-server {{ zabbixServerLevel }} config file template: src=zabbix_server.conf.j2 dest=/etc/zabbix/zabbix_server.conf backup=yes @@ -32,6 +32,12 @@ - name: config shell: sed -i.bak 's/listen.acl_users.*/listen\.acl_users=apache,nginx/;s@; php_value\[date\.timezone\].*@php_value[date.timezone]=Asia/Shanghai@' /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf +- name: copy script + template: src={{ item }} dest=/usr/lib/zabbix/alertscripts + with_items: + - dingding.py + - wechat3.py + - name: service start service: name={{ item }} state=restarted enabled=yes with_items: diff --git a/zabbix-ansible/zabbix-server/templates/dingding.py b/zabbix-ansible/zabbix-server/templates/dingding.py new file mode 100644 index 0000000..02fc55d --- /dev/null +++ b/zabbix-ansible/zabbix-server/templates/dingding.py @@ -0,0 +1,39 @@ +#!/usr/bin/python3 +#-*-coding: utf-8-*- +# by QianFeng.newrain +# +''' + Welcome QianFeng cloud computing +''' +import requests +import json +import sys +import time,hmac,base64,hashlib,urllib.parse + + +headers = {'Content-Type': 'application/json;charset=utf-8'} +# 需要修改,钉钉群助手中获取 +timestamp = str(round(time.time() * 1000)) +secret = {{ secret }} +secret_enc = secret.encode('utf-8') +string_to_sign = '{}\n{}'.format(timestamp, secret) +string_to_sign_enc = string_to_sign.encode('utf-8') +hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest() +sign = urllib.parse.quote_plus(base64.b64encode(hmac_code)) +api_url = f"https://oapi.dingtalk.com/robot/send?access_token=abdec0db67d1ca355b547711f822e0bb60929295cd3c42c1e4c89c7f24b4872e×tamp={timestamp}&sign={sign}" +def msg(text): + json_text= { + "msgtype": "text", + "at": { + "atMobiles": [ + "all" + ], + "isAtAll": False + }, + "text": { + "content": text + } + } + print(requests.post(api_url,json.dumps(json_text),headers=headers).content.decode()) + +msg('\n'+sys.argv[1]) \ No newline at end of file diff --git a/zabbix-ansible/zabbix-server/templates/wechat3.py b/zabbix-ansible/zabbix-server/templates/wechat3.py new file mode 100644 index 0000000..afdcbd4 --- /dev/null +++ b/zabbix-ansible/zabbix-server/templates/wechat3.py @@ -0,0 +1,60 @@ +#!/usr/bin/python3 +#-*-coding: utf-8-*- +# by QianFeng.newrain +# +''' + Welcome QianFeng cloud computing +''' + +import json +import sys +import time +import requests + +# 此为企业的ID号 +CorpID = {{ corpid }} + +# 应用的ID +Agentid = {{ agentid }} + +# 认证信息,企业ID+认证信息可获取tokent,获取之后向此tokent发送内容 +Secret = {{ secret }} + +localtime = time.strftime("[%H:%M:%S]", time.localtime()) +class Tencent(object): + def __init__(self,user,title, msg): + # 格式化输出内容:标题+内容 + self.MSG = f'{title}\n{msg}\n{localtime}' + self.User = user + self.url = 'https://qyapi.weixin.qq.com' + self.send_msg = json.dumps({ + "touser": self.User, + "msgtype": 'text', + "agentid": Agentid, + "text": {'content': self.MSG}, + "safe": 0 + }) + # 获取tokent + def get_token(self): + token_url = '%s/cgi-bin/gettoken?corpid=%s&corpsecret=%s' % (self.url, CorpID, Secret) + r = requests.get(token_url) + r = r.json() + token = r['access_token'] + return token + + # 发送信息 + def send_message(self): + send_url = '%s/cgi-bin/message/send?access_token=%s' % (self.url,self.get_token()) + respone = requests.post(url=send_url, data=self.send_msg) + respone = respone.json() + x = respone['errcode'] + if x == 0: + print ('Succesfully') + else: + print ('Failed') + +if __name__ == '__main__': + # 创建对象 + send_obj = Tencent(sys.argv[1],str(sys.argv[2]), str(sys.argv[3])) + # 调用发送函数 + send_obj.send_message() diff --git a/zabbix-ansible/zabbix-server/vars/main.yml b/zabbix-ansible/zabbix-server/vars/main.yml index 9a86505..233ae81 100644 --- a/zabbix-ansible/zabbix-server/vars/main.yml +++ b/zabbix-ansible/zabbix-server/vars/main.yml @@ -2,3 +2,12 @@ # vars file for zabbix-server zabbixServerLevel: 5.0 database: "{{ dbHost }}" + + +# 微信报警脚本配置 +corpid: 'wwa1dc8236066bab50' +agentid: 1000005 +secret: 'CRzsnYigkQy_9qoHErXG94am81AUuXabY0A8-N7LW_4' + +# 钉钉报警脚本配置 +secret: 'SECf3aa0ec68151d6a0599d8d9db4fa40afa5341c358d53af717eb924f0fa29ee5f' \ No newline at end of file diff --git a/zbx_export_templates.xml b/zbx_export_templates.xml index ece5dcd..a806046 100644 --- a/zbx_export_templates.xml +++ b/zbx_export_templates.xml @@ -1,7 +1,7 @@ 5.0 - 2021-06-25T15:42:45Z + 2023-02-01T15:30:14Z Zabbix servers @@ -23,6 +23,9 @@ nginx monitor + + redis monitor + system monitor @@ -249,6 +252,88 @@ + + redis_version + redischeck.mode[redis_version] + 1h + 0 + TEXT + + + redis monitor + + + + + redis_role + redischeck.mode[role] + 5m + 0 + TEXT + + + redis monitor + + + + + redis_total_system_memory_human + redischeck.mode[total_system_memory_human] + 5m + 0 + TEXT + + + redis monitor + + + + + redis_used_cpu_sys + redischeck.mode[used_cpu_sys:] + 5m + FLOAT + + + redis monitor + + + + + redis_used_cpu_user + redischeck.mode[used_cpu_user:] + 5m + FLOAT + + + redis monitor + + + + + redis_used_memory_human + redischeck.mode[used_memory_human] + 5m + 0 + TEXT + + + redis monitor + + + + + redis_used_memory_rss_human + redischeck.mode[used_memory_rss_human] + 5m + 0 + TEXT + + + redis monitor + + + system port connect 22 systemcheck.connect[22]