• zabbix的安装配置,邮件告警,钉钉告警


    zabbix监控架构

    zabbix优点

    •  开源,无软件成本投入
    • server对设备性能要求低
    • 支持设备多,自带多种监控模板
    • 支持分布式集中管理,有自动发现功能,可以实现自动化监控
    • 开放式接口,扩展性强,插件编写容易
    • 当监控的item比较多服务器队列比较大时可以采用主动状态,被监控客户端主动从server端去下载需要监控的item然后取数据上传到server端。这种方式对服务器的负载比较小
    • Api的支持,方便与其他系统结合

    zabbix缺点

    需在被监控主机上安装agent,所有数据都存在数据库里,产生数据很大,瓶颈主要在数据库

    zabbix的安装

    安装

    1. [root@zabbix-server ~]# yum install -y https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
    2. [root@zabbix-server ~]# yum clean all
    3. [root@zabbix-server ~]# yum makecache fast
    4. [root@zabbix-server ~]# yum -y install zabbix-agent zabbix-get zabbix-sender zabbix-server-mysql

    数据库安装配置

    1. [root@zabbix-server ~]# yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
    2. [root@zabbix-server ~]# vim /etc/yum.repos.d/mysql-community.repo(打开5.7的源关闭8.0的源)
    3. [root@zabbix-server ~]# systemctl start mysqld
    4. [root@zabbix-server ~]# grep "password" /var/log/mysqld.log
    5. [root@zabbix-server ~]# mysql -uroot -p'password'
    6. mysql> create database zabbix character set utf8 collate utf8_bin; # 创建zabbix数据库
    7. mysql> grant all on zabbix.* to 'zabbix'@'%' identified by 'keer'; # 注意授权网段
    8. mysql> flush privileges;

    数据表导入

    1. [root@zabbix-server ~]# rpm -ql zabbix-server-mysql
    2. [root@zabbix-server ~]# zcat /usr/share/doc/zabbix-server-mysql-5.0.10/create.sql.gz | mysql -uzabbix -pkeer -h 192.168.203.162 zabbix

    配置zabbix并启动

    1. [root@zabbix-server ~]# cd /etc/zabbix
    2. [root@zabbix-server zabbix]# cp zabbix_server.conf{,.bak} # 备份配置文件
    3. [root@zabbix-server zabbix]# vim zabbix_server.conf
    4. ListenPort=10051 #默认监听端口
    5. SourceIP=192.168.249.141 #发采样数据请求的IP
    6. DBHost=192.168.249.141 #数据库对外的主机
    7. DBName=zabbix #数据库名称
    8. DBUser=zabbix #数据库用户
    9. DBPassword=keer #数据库密码
    10. DBPort=3306 #数据库启动端口
    11. [root@zabbix-server zabbix]# systemctl start zabbix-server.service

    配置web GUI

    1. [root@zabbix-server ~]# vim /etc/yum.repos.d/zabbix.repo
    2. [zabbix-frontend] # 将这个软件源设置为启动
    3. enabled=1
    4. [root@zabbix-server ~]# yum install centos-release-scl
    5. [root@zabbix-server ~]# yum install zabbix-web-mysql-scl zabbix-nginx-conf-scl
    6. [root@zabbix-server ~]# vim /etc/opt/rh/rh-nginx116/nginx/nginx.conf(删除多余server模块,或修改端口)
    7. [root@zabbix-server ~]# vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
    8. listen.acl_users = apache,nginx
    9. php_value[date.timezone] = Asia/Shanghai
    10. root@zabbix-server ~]# systemctl restart zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm
    11. [root@zabbix-server ~]# systemctl enable zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm

    再进入web页面然后登录即可   默认用户名:admin   密码:zabbix

    配置agent端

    1.安装zabbix

    1. 下载安装官方yum源
    2. [root@zabbix-slave1 ~]# rpm -Uvh https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm
    3. [root@zabbix-slave1 ~]# yum clean all
    4. [root@zabbix-slave1 ~]# yum makecache fast
    5. 已加载插件:fastestmirror
    6. 正在清理软件源: base extras updates zabbix zabbix-non-supported
    7. # yum 下载
    8. [root@zabbix-slave1 ~]# yum install zabbix-agent zabbix-sender -y

    2.修改配置文件

    1. [root@zabbix-slave1 ~]# cd /etc/zabbix/
    2. [root@zabbix-slave1 zabbix]# vim zabbix_agentd.conf
    3. Server=172.16.147.153 #指明服务器是谁
    4. ListenPort=10050 #自己监听的端口
    5. ListenIP=0.0.0.0 #自己监听的地址,0.0.0.0表示本机所有地址
    6. StartAgents=3 #优化时使用的
    7. ServerActive=172.16.147.153 #主动监控时的服务器
    8. Hostname=node1.keer.com #自己能被server端识别的名称
    9. [root@zabbix-slave1 zabbix]# systemctl start zabbix-agent.service

    zabbix页面添加监控机器的过程

    先创建主机群组,再创建主机并加入到主机群组中,然后点击监控项,创建监控项,起个易懂的名称,设置键值选择要监控的模块,然后修改此键值所需要的信息类型以及单位,再测试并添加,再创建用于此模块的触发器,然后设置动作,发送通知或者自动修改。

    邮箱,钉钉告警流程

    邮箱告警:在创建完上方所需动作后,先修改配置文件sudo提权以及配置文件允许接收远程命令 ,把接收的远程命令计入日志,然后设置报警媒介类型中,创建媒体类型,在其中添加好自己要发送邮件的地址,然后添加完成后再进入用户中添加报警媒介,然后进入动作中添加发送消息的操作邮件,以及执行远程命令 

    钉钉告警

     在群聊中添加自定义机器人

    安装python依赖模块python-requests

    yum -y install python3 python3-requests

     创建目录/etc/zabbix/创建zabbix_ding.conf文件,配置钉钉告警脚本zabbix_ding.conf

    1. [root@qfedu ~]# vim /etc/zabbix/zabbix_ding.conf
    2. [config]
    3. log_path=/var/log/zabbix/zabbix_ding.log
    4. webhook=https://oapi.dingtalk.com/robot/send?access_token=c1d11ecf6704f008eb25de644ed5cead752c065c0d11f9f89b58273cf0c78a96
    5. secret=SECc26e5bc55c64d454f15a8bdcce6825b7e5bb4f6fecc38025d2845837415192d7

     在目录/var/log/zabbix中创建钉钉告警日志文件zabbix _ding.log,并设置权限

    1. [root@qfedu ~]# touch /var/log/zabbix/zabbix_ding.log
    2. [root@qfedu ~]# chown zabbix.zabbix /var/log/zabbix/zabbix_ding.log

    在zabbix_server.conf中配置告警脚本的路径

    1. vim /etc/zabbix/zabbix_server.conf
    2. 在zabbix_server.conf中配置告警脚本的路径
    3. # AlertScriptsPath=/usr/lib/zabbix/alertscripts
    4. 我这里修改为
    5. AlertScriptsPath=/usr/lib/zabbix/alertscripts

     在/usr/lib/zabbix/alertscripts目录中执行脚本dingding.py的内容

    1. # cd /usr/lib/zabbix/alertscripts
    2. # vim dingding.py
    3. 以下内容添加至dingding.py内
    4. #!/usr/bin/env python3
    5. # coding:utf8
    6. #
    7. import configparser
    8. import os
    9. import time
    10. import hmac
    11. import hashlib
    12. import base64
    13. import urllib.parse
    14. import requests
    15. import json
    16. import sys
    17. config = configparser.ConfigParser()
    18. config.read('/etc/zabbix/zabbix_ding.conf', encoding='utf-8')
    19. log_path = config.get('config', 'log_path')
    20. api_url = config.get('config', 'webhook')
    21. api_secret = config.get('config', 'secret')
    22. log_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    23. # 钉钉机器人文档说明
    24. # https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
    25. def get_timestamp_sign():
    26. timestamp = str(round(time.time() * 1000))
    27. secret = api_secret
    28. secret_enc = secret.encode('utf-8')
    29. string_to_sign = '{}\n{}'.format(timestamp, secret)
    30. string_to_sign_enc = string_to_sign.encode('utf-8')
    31. hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
    32. sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
    33. return timestamp, sign
    34. # 获取加签后的链接
    35. def get_signed_url():
    36. timestamp, sign = get_timestamp_sign()
    37. webhook = api_url + "×tamp=" + timestamp + "&sign=" + sign
    38. return webhook
    39. # 定义消息模式
    40. def get_webhook(mode):
    41. if mode == 0: # only 关键字
    42. webhook = api_url
    43. elif mode == 1 or mode == 2: # 关键字和加签 或 # 关键字+加签+ip
    44. webhook = get_signed_url()
    45. else:
    46. webhook = ""
    47. print("error! mode: ", mode, " webhook : ", webhook)
    48. return webhook
    49. def get_message(text, user_info):
    50. # 和类型相对应,具体可以看文档 :https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
    51. # 可以设置某个人的手机号,指定对象发送
    52. message = {
    53. "msgtype": "text", # 有text, "markdown"、link、整体跳转ActionCard 、独立跳转ActionCard、FeedCard类型等
    54. "text": {
    55. "content": text # 消息内容
    56. },
    57. "at": {
    58. "atMobiles": [
    59. user_info,
    60. ],
    61. "isAtAll": False # 是否是发送群中全体成员
    62. }
    63. }
    64. return message
    65. # 消息发送日志
    66. def log(info):
    67. if os.path.exists(log_path):
    68. log_file = open(log_path, "a+")
    69. else:
    70. log_file = open(log_path, "w+")
    71. log_file.write(info)
    72. def send_ding_message(text, user_info):
    73. # 请求的URL,WebHook地址
    74. # 主要模式有 0 : 关键字 1:# 关键字 +加签 3:关键字+加签+IP
    75. webhook = get_webhook(1)
    76. # 构建请求头部
    77. header = {
    78. "Content-Type": "application/json",
    79. "Charset": "UTF-8"
    80. }
    81. # 构建请求数据
    82. message = get_message(text, user_info)
    83. # 对请求的数据进行json封装
    84. message_json = json.dumps(message)
    85. # 发送请求
    86. info = requests.post(url=webhook, data=message_json, headers=header).json()
    87. code = info["errcode"]
    88. errmsg = info["errmsg"]
    89. if code == 0:
    90. log(log_time + ":消息已发送成功 返回信息:%s %s\n" % (code, errmsg))
    91. else:
    92. log(log_time + ":消息发送失败 返回信息:%s %s\n" % (code, errmsg))
    93. print(log_time + ":消息发送失败 返回信息:%s %s\n" % (code, errmsg))
    94. exit(3)
    95. if __name__ == "__main__":
    96. text = sys.argv[3]
    97. user_info = sys.argv[1]
    98. send_ding_message(text, user_info)

    设置脚本目录的所以权,并测试

    1. chown -R zabbix.zabbix /usr/lib/zabbix/alertscripts/
    2. chmod +x dingding.py
    3. ./dingding.py user subject mesages

    然后在web端配置告警媒介

    {ALERT.SENDTO}
    {ALERT.SUBJECT}
    {ALERT.MESSAGE} 

     

    自定义消息内容

    主题:服务器报警
    消息:
    告警主机:{HOST.NAME}
    告警地址:{HOST.IP}
    监控项目:{ITEM.NAME}
    监控取值:{ITEM.LASTVALUE}
    告警等级:{TRIGGER.SEVERITY}
    当前状态:{TRIGGER.STATUS}
    告警信息:{TRIGGER.NAME}
    告警时间:{EVENT.DATE} {EVENT.TIME}
    事件ID:{EVENT.ID} 

    主题:服务器已恢复
    消息:
    告警主机:{HOST.NAME}
    告警地址:{HOST.IP}
    监控项目:{ITEM.NAME}
    监控取值:{ITEM.LASTVALUE}
    告警等级:{TRIGGER.SEVERITY}
    当前状态:{TRIGGER.STATUS}
    告警信息:{TRIGGER.NAME}
    告警时间:{EVENT.DATE} {EVENT.TIME}
    事件ID:{EVENT.ID} 

  • 相关阅读:
    闯关无边界时代,荣耀与华为全场景OS相见
    opencv滤波技术
    油封的正常使用寿命是多长?
    【JVM】jvm的双亲委派机制
    opencv车牌识别<二>
    Windows Server 2016 部署DNS
    【C++】C++中那些有点意思,但一般也用不到的替代运算符
    T20V9通用图库没有
    工程制图名词解释-重点知识
    C++代码示例:组合数简单生成工具
  • 原文地址:https://blog.csdn.net/weixin_66519301/article/details/134475234