赞
踩
调研了目前一些方案,有通过ElastAlert+elastalert-dingtalk-plugin,也试了一下踩了坑一直起不来遂放弃。还有通过sentinel看了一下,要求和es版本强一致性,遂放弃。
最后选取了,Zabbix+Logstash的方案,毕竟是专业做监控的,考虑到日后可能会有更多拓展内容要做,同时使用logstash不会影响到kibana,在推送到es的同时,过滤异常的消息推送打zabbix,可以自定义的拦截不同的日志
用到的组件
安装repo、server、agent以及frontend:
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
yum install zabbix-server-mysql zabbix-agent -y
yum install centos-release-scl -y
修改配置文件,enabled=0改成enabled=1
vim /etc/yum.repos.d/zabbix.repo
安装frontend包
yum install zabbix-web-mysql-scl zabbix-apache-conf-scl
下载mariadb数据库
yum install mariadb mariadb-server -y
启动数据库
service mariadb start
设置开机启动mariadb数据库
systemctl enable mariadb
查看进程
[root@izbp10k7vskcf4soxxbp5gz ~]# ps aux | grep mysql
root 10680 0.0 0.0 112660 968 pts/5 S+ 10:49 0:00 grep --color=auto mysql
mysql 25499 0.0 0.0 113260 1584 ? Ss May31 0:00 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
mysql 25669 0.1 0.5 2684056 170996 ? Sl May31 3:35 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock
root 30378 0.1 4.9 6993712 1602672 ? Sl May10 63:17 /usr/local
进入数据库,并创建用户
注意首次进入时,需输入密码,无需理会,双击回车即可进入
mysql -uroot -p
create database zabbix character set utf8 collate utf8_bin;
create user zabbix@localhost identified by '123456';
grant all privileges on zabbix.* to zabbix@localhost;
quit;
关闭防火墙
service firewalld stop
systemctl disable firewalld
关闭selinux安全机制,临时和永久都关闭
vim /etc/sysconfig/selinux
把SELINUX修改为disabled
SELINUX=disabled
导入初始化架构
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
修改 Zabbix server配置数据库
vim /etc/zabbix/zabbix_server.conf在这里插入代码片
修改
DBPassword=123456
为Zabbix前端配置PHP
vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
在最后面添加这一行
php_value[date.timezone] = Asia/Shanghai
systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm
# 看进程、端口
ps aux|grep zabbix
netstat -anplut|grep zabbix
安装zabbix server的时候默认就安装了apache,zabbix依靠apache提供的web服务,修改Zabbix的浏览器访问端口,就是修改apache的服务端口(默认端口:80)
vim /etc/httpd/conf/httpd.conf
# 修改端口,可自定义
Listen 8008
# 重启apache服务
service httpd restart
浏览器 访问http://IP+端口/zabbix
全部设置好之后,登录Zabbix
用户名: Admin
密码:zabbix
修改为中文
安装完Zabbix之后,配置Logstash,首先需要下载logstash的插件logstash-output-zabbix
# 去到logstash的安装目录 下载
/usr/local/logstash/logstash-7.7.0/bin/logstash-plugin install logstash-output-zabbix
# 查看已经安装的插件
/usr/local/logstash/logstash-7.7.0/bin/logstash-plugin list
去到配置文件目录
[root@izbp10k7vskcf4soxxbp5gz config]# ls
demo.conf log4j2.properties logstash.yml startup.options
jvm.options logstash-sample.conf pipelines.yml
[root@izbp10k7vskcf4soxxbp5gz config]# pwd
/usr/local/logstash/logstash-7.7.0/config
[root@izbp10k7vskcf4soxxbp5gz config]#
新建一个demo.conf,仅供参考,可以根据自己的实际业务定制
input { # logstash支持多种输入 # 此处我采用的是springboot项目的logback集成logstash的方式 # 也可以采用filebeat的方式 tcp { port => 9600 codec => json_lines } } filter { mutate { add_field => ["[zabbix_key]","oslogs"] # zabbix_key可以自定义 add_field => ["[zabbix_host]","Zabbix server"] # 注意zabbix_host需要与zabbix中host对应,可以进入zabbix查看 add_field => ["[msg]","%{appname} %{message}"] } } output { # 重点参考以下为 if [level] =~ /(ERR|error|ERROR|Failed)/ { zabbix { zabbix_host => "[zabbix_host]" zabbix_key => "[zabbix_key]" zabbix_server_host => "xxx.16.143.246" # zabbix的主机ip zabbix_server_port => "10051" zabbix_value => "msg" # zabbix_value为要输出的日志内容 } } stdout { # 输出到命令窗口 codec => rubydebug } }
保存配置并启动logstash
# 建议先使用直接启动方式,便于排查
bin/logstash -f config/demo.conf
# 后台启动
nohup bin/logstash -f config/demo.conf &
首先创建一个模版
配置该模版的应用logstash-zabbix-app
配置一个监控项
创建完之后,把该模板应用到主机
选择刚才新建的模版
之后去触发logstash,并查看
至此,工作已经完成了一半,如果消息无法收到,可以看看logstash的配置适合和zabbix有出入
配置触发器,还是在上面模版上新增触发器
去到首页,重新触发,查看效果
先去钉钉创建一个群,并配置一个机器人
查看zabbix脚本存放的位置
[root@izbp10k7vskcf4soxxbp5gz /]# grep ^AlertScriptsPath /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts
[root@izbp10k7vskcf4soxxbp5gz /]#
去到对应的目录
[root@izbp10k7vskcf4soxxbp5gz /]# cd /usr/lib/zabbix/alertscripts
# 创建文件dingding.py 和 dingding.log
[root@izbp10k7vskcf4soxxbp5gz alertscripts]# ls
dingding.log dingding.py
钉钉推送脚本
#!/usr/bin/env python #coding:utf-8 """ Description : 测试钉钉群机器人推送消息 安全设置是必填项,例如 自定义关键字:钉钉 钉钉发送通知时,必须包含关键字 "钉钉",不然会报 keyword not in content。 """ import requests,json,sys,os,datetime webhook="https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxx" user=sys.argv[1] text=sys.argv[3] data={ "msgtype": "text", "text": { "content": text }, "at": { "atMobiles": [ "186..." #需要@群里谁 ], "isAtAll": False #是否全部@,True为是,False为否 } } headers = {'Content-Type': 'application/json'} x=requests.post(url=webhook,data=json.dumps(data),headers=headers) if os.path.exists("/usr/lib/zabbix/alertscripts/dingding.log"): f=open("/usr/lib/zabbix/alertscripts/dingding.log","a+") else: f=open("/data/logs/zabbix/dingding.log","w+") # 修改为自己的日志路径,及刚才创建的日志路径 f.write("\n"+"--"*30) if x.json()["errcode"] == 0: f.write("\n"+str(datetime.datetime.now())+" "+str(user)+" "+"发送成功"+"\n"+str(text)) f.close() else: f.write("\n"+str(datetime.datetime.now()) + " " + str(user) + " " + "发送失败" + "\n" + str(text)) f.close()
给予权限
chmod +x dingding.py
测试脚本是否可正常执行
./dingding.py xxx test "这是条告警测试信息,请忽略"
注意在配置钉钉群的时候有个坑,发送的消息一定要包含钉钉自定义关键字,切记!切记!切记!
不出意外,消息是正常可以接收到
首先创建一个告警媒介
脚本参数:
{ALERT.SENDTO}
#对应脚本中的(发给钉钉群中哪个用户)。
{ALERT.SUBJECT}
#代表发送的信息的标题
{ALERT.MESSAGE}
#对应脚本中的发送的报警内容
先点击测试,看看是否顺畅
创建一个新动作
选择上文创建的触发器
参考如下
默认接收人:告警等级:{TRIGGER.SEVERITY} 主机:{HOSTNAME1} {TRIGGER.NAME} 默认信息: 告警主机:{HOSTNAME1} 告警信息:{TRIGGER.NAME} 告警等级:{TRIGGER.SEVERITY} 告警项目:{ITEM.NAME} 告警时间:{EVENT.DATE}_{EVENT.TIME} 当前状态:故障 值={ITEM.VALUE1} 故障已持续{EVENT.AGE},请尽快处理 事件ID:{EVENT.ID}
选择管理员,对应上面配置的动作
添加一个新的报警媒介
新建的时候选择对应的动作
至此,配置完成
触发动作,去到首页查看效果
钉钉消息推送
Zabbix 5.0版本的详细安装教程
Zabbix与ELK整合实现对安全日志数据的实时监控告警
zabbix实现钉钉告警
Zabbix5.0钉钉告警实战
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。