Zabbix+Logstash+钉钉日志告警

方案

调研了目前一些方案,有通过ElastAlert+elastalert-dingtalk-plugin,也试了一下踩了坑一直起不来遂放弃。还有通过sentinel看了一下,要求和es版本强一致性,遂放弃。
最后选取了,Zabbix+Logstash的方案,毕竟是专业做监控的,考虑到日后可能会有更多拓展内容要做,同时使用logstash不会影响到kibana,在推送到es的同时,过滤异常的消息推送打zabbix,可以自定义的拦截不同的日志

用到的组件

  1. Logstash
  2. Zabbix

安装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   

启动Zabbix server和agent进程

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
在这里插入图片描述
修改为中文
在这里插入图片描述

配置Logstash

安装完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  &

配置Zabbix

首先创建一个模版
在这里插入图片描述
在这里插入图片描述
配置该模版的应用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 "这是条告警测试信息,请忽略"

注意在配置钉钉群的时候有个坑,发送的消息一定要包含钉钉自定义关键字,切记!切记!切记!
在这里插入图片描述
不出意外,消息是正常可以接收到
在这里插入图片描述

配置Zabbix触发推送

首先创建一个告警媒介
在这里插入图片描述
在这里插入图片描述

脚本参数:

{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钉钉告警实战

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值