zabbix介绍
Zabbix简介
Zabbix 是一个高度集成的网络监控解决方案,由一个国外的团队持续维护更新,软件可以自由下载使用。具备常见的商业监控软件所具备的功能(主机的性能监控、网络设备性能监控、数据库性能监控、FTP 等通用协议监控、多种告警方式、详细的报表图表绘制).Zabbix 通过 C/S 模式采集数据,通过 B/S 模式在 web 端展示和配置:
Client(被监控)端: 主机通过安装 agent 方式采集数据,网络设备通过 SNMP 方式采集数据
Server (服务)端: 通过收集 SNMP 和 agent 发送的数据,写入数据库再通过 php+apache 在 web 前端展示。
Zabbix功能:
1. 支持自动发现网络设备和服务器(可以通过配置自动发现服务器规则来实现)
2. 支持自动发现(low discovery)key 实现动态监控项的批量监控(需写脚本)
3. 支持分布式,能集中展示、管理分布式的监控点
4. 扩展性强,server 提供通用接口(api 功能),可以自己开发完善各类监控(根据相关接口编写程序实现)
zabbix原理图:
编写插件容易,可以自定义监控项,报警级别的设置。数据收集:
1. 可用和性能检测
2. 支持 snmp(包括 trapping and polling ),IPMI,JMX,SSH,TELNET
3. 自定义的检测
4. 自定义收集数据的频率
5. 服务器/代理和客户端模式
6. 灵活的触发器
7. 可以定义非常灵活的问题阈值,称为触发器,从后端数据库的参考值
8. 高可定制的报警
9. 发送通知,可定制的报警升级,收件人,媒体类型
10. 通知可以使用宏变量有用的变量
11. 自动操作包括远程命令
12. 实时的绘图功能
13. 监控项实时的将数据绘制在图形上面
WEB 监控:
1.ZABBIX 可以模拟鼠标点击了一个网站,并检查返回值和响应时间Api 功能
应用 api 功能:
1.可以方便的和其他系统结合,包括手机客户端的使用。
监控服务端部署
主机名 | ip地址 | 说明 |
zabbix | 172.16.1.71 | 监控服务端 |
web01 | 172.16.1.7 | 监控客户端 |
服务端部署
配置环境:
更新zabbix源:
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-1.el7.noarch.rpm -- 老版本
下载安装zabbix服务端相关软件 LAMP
zabbix服务程序软件: zabbix-server-mysql
zabbix服务web软件: zabbix-web-mysql httpd php
数据库服务软件: mariadb-server
yum install -y zabbix-server-mysql zabbix-web-mysql httpd php mariadb-server
配置文件
vim /etc/zabbix/zabbix_server.conf
100:DBName=zabbix 116:DBUser=zabbix 125:DBPassword=zabbix
vim /etc/httpd/conf.d/zabbix.conf
修改系统时区
20 # php_value date.timezone Europe/Riga 欧洲/拉脱维亚 时间更改为亚洲上海 更改为: 20 php_value date.timezone Asia/Shanghai
1. 创建zabbix数据库
yum install mariadb mariadb-devel mariadb-server -y
systemctl start mariadb.service
systemctl status mariadb.service
systemctl enable mariadb.service
mysql
create database zabbix character set utf8 collate utf8_bin; --- 默认拉丁字符集 # 创建数据库管理用户 grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
在zabbix数据库中导入相应的表信息
zcat /usr/share/doc/zabbix-server-mysql-4.0.15/create.sql.gz|mysql -uzabbix -pzabbix zabbix
#检查zabbix库是否导入成功
mysql -uroot zabbix -e 'show tables'
systemctl start zabbix-server.service httpd mariadb.service
systemctl enable zabbix-server.service httpd mariadb.service
LNMP: nginx 服务 php 服务
输入密码:
zabbix名称:
登录:
登录zabbix服务web页面 用户名Admin 密码zabbix
10051 zabbix-server 服务端端口号 10050 zabbix-agent 客户端端口号 /etc/zabbix/web/zabbix.conf.php -- 记录web页面初始化信息
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
yum install -y zabbix-agent
[root@zabbix ~]# systemctl start zabbix-agent
[root@zabbix ~]# netstat -lntup|grep 10050
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 4509/zabbix_agentd tcp 0 0 :::10050 :::* LISTEN 4509/zabbix_agentd
查看:
添加自定义监控项
概述
有时候当我们监控的项目在zabbix预定义的key中没有定义时,这时候我们可以通过编写.zabbix的用户参数的方法来监控我们要求的项目item。形象-点说zabbix代理端配置文件中的User parameters就相当于通过脚本获取要监控的值,然后把相关的脚本或者命令写入到配置文件中的User parameter中然后zabbix server读取配置文件中的返回值通过处理前端的方式返回给用户。
用户参数的语法:
1. 客户端创建监控项key值
zabbix-agent进行设置 : Include=/etc/zabbix/zabbix_agentd.d/*.conf
例1.监控内存使用情况
UserParameter=used.mem,free -h|awk -F "[ M]+" 'NR==2{print $4}' #将上面的信息输入到web01/etc/zabbix/zabbix_agentd.d/mem.conf systemctl restart zabbix-agent.service
例2.创建监控主机用户数
创建监控项key值
vim /etc/zabbix/zabbix_agentd.d/count.conf UserParameter=user.count,w|awk 'NR==1{print $4}' systemctl restart zabbix_agent.service
2. 服务端检查确认
服务端进行测试
[root@zabbix ~]# yum install -y zabbix-get [root@zabbix ~]# zabbix_get -s 172.16.1.7 -k 'used.mem' [root@zabbix ~]# zabbix_get -s 172.16.1.7 -k 'user.count'
3. 网页创建自定义监控项
创建自动义选项:
查看监控项:
UserParameter=tcp.status[*],netstat -an|grep -ic $1 #使用变量将状态写入 systemctl restart zabbix-agent.service #重启服务
2.服务端网页配置监控项
结果:
名称 键值 应用集
tcp_state_established tcp.status[established] tcp_state
tcp_state_listen tcp.status[listen] tcp_state
tcp_state_syn_sent tcp.status[syn_sent] tcp_state
#客户端更新完一定要进行重启
验证:
[root@zabbix /]# zabbix_get -s 172.16.1.7 -k tcp.status[listen] 44
#!/bin/bash netstat -lntup|grep 80 &>/dev/null REVAL=$? if [ $REVAL -ne 0 ] then echo OK else echo faild fi
chmod +x /server/scripts/check_web.sh #添加执行权限
2. 客户端监控配置文件
vim /etc/zabbix/zabbix_agentd.d/server.conf
UserParameter=nginx.state,/server/scripts/check_web.sh
重启服务:
[root@web01 /]# systemctl restart zabbix-agent.service
3. zabbix服务端验证
[root@zabbix ~]# zabbix_get -s 172.16.1.7 -k nginx.state (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) OK
2. 设置监控触发器
3. 设置邮箱通知:
4. 报警声音
alarm_average.mp3
alarm_disaster.mp3
alarm_high.mp3
alarm_information.mp3
alarm_ok.mp3
alarm_warning.mp3
no_sound.mp3
xxx.mp3
将下载好的mp3格式的音频添加到目录里,把原来的给备份,然后将下载好的音频剪切为默认的名字
[root@zabbix /usr/share/zabbix/audio]# mv no_sound.mp3 no_sound.mp3.bak [root@zabbix /usr/share/zabbix/audio]# mv xxx.mp3 no_sound.mp3
3. 配置报警动作信息
确认开启。
4. 测试报警
关闭web01 nginx服务查看网页,已经收到邮件
#!/usr/bin/python #coding:utf-8 import smtplib from email.mime.text import MIMEText import sys mail_user = 'w1354586675@163.com' #邮件地址 mail_pass = 'wei1999' #效验码,自己定义 def send_mail(to_list,subject,content): me = "zabbix 监控告警平台"+"<"+mail_user+">" msg = MIMEText(content, 'plain', 'utf-8') msg['Subject'] = subject msg['From'] = me msg['to'] = to_list try: s = smtplib.SMTP("smtp.163.com", 25) s.login(mail_user,mail_pass) s.sendmail(me,to_list,msg.as_string()) s.close() return True except Exception,e: print str(e) return False if __name__ == "__main__": send_mail(sys.argv[1], sys.argv[2], sys.argv[3])
[root@zabbix ~]# chmod +x /usr/lib/zabbix/alertscripts/mail_163.py [root@zabbix ~]# cd /usr/lib/zabbix/alertscripts/ [root@zabbix /usr/lib/zabbix/alertscripts]# ./mail_163.py w1354586675@163.com test_check hello # 邮件地址需要先在zabbix用户邮箱添加
2.在报警媒介中调用脚本
{ALERT.SENDTO} --- 脚本参数信息 收件任务信息 {ALERT.SUBJECT} --- 脚本参数信息 邮件标题信息 {ALERT.MESSAGE} --- 脚本参数信息 邮件内容信息
3.定义接收报警信息人员
4.效验结果,查看 报表 ---> 动作日志
1. 收集信息:
AgentId:1000002
2. 编写微信脚本
人员加入企业微信,修改脚本的 企业ID,AgentId,Secret
下载python需要的模块,脚本会用到脚本的模块:
~/.pip/pip.conf
[root@zabbix /]# mkdir ~/.pip/ #创建目录 [root@zabbix /]# vim ~/.pip/pip.conf #编辑配置文件
[global] index-url = https://mirrors.aliyun.com/pypi/simple/ [install] trusted-host=mirrors.aliyun.com
下载python模块
yum install -y python-pip #安装pip下载 pip install requests #安装模块
脚本内容:
vim /usr/lib/zabbix/alertscripts/weixin.py
#!/usr/bin/env python #-*- coding: utf-8 -*- #author: yanggd #date: 2018-04-20 #comment: zabbix接入微信报警脚本 import requests import sys import os import json import logging logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s', datefmt = '%a, %d %b %Y %H:%M:%S', filename = os.path.join('/tmp','weixin.log'), filemode = 'a') #以下三项是根据你自己企业微信的信息填写 corpid='ww2c7d46ffc922766d' appsecret='IeHkXTieFQFDf6D50HL0Z1z6nCKBSwV7j5lowpLp5qA' agentid=1000002 #获取accesstoken token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret req=requests.get(token_url) accesstoken=req.json()['access_token'] #发送消息 msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken touser=sys.argv[1] subject=sys.argv[2] #toparty='3|4|5|6' message=sys.argv[2] + " " +sys.argv[3] params={ "touser": touser, # "toparty": toparty, "msgtype": "text", "agentid": agentid, "text": { "content": message }, "safe":0 } req=requests.post(msgsend_url, data=json.dumps(params)) logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message)
chmod +x /usr/lib/zabbix/alertscripts/weixin.py
chown zabbix.zabbix /tmp/weixin.log #服务端的日志
发送信息给微信
[root@zabbix /]# cd /usr/lib/zabbix/alertscripts/ [root@zabbix /usr/lib/zabbix/alertscripts]# ./weixin.py 收微信人员账号信息 标题 "内容"
参数:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
4.添加动作
配置 -----》动作 -----》创建动作
[{TRIGGER.SEVERITY}]服务器:{HOSTNAME1}发生:{TRIGGER.NAME}故障!
消息内容:
告警主机: {HOSTNAME1}
主机分组: {TRIGGER.HOSTGROUP.NAME}
告警时间: {EVENT.DATE} {EVENT.TIME}
告警等级: {TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目: {TRIGGER.KEY1}
问题详情: {ITEM.NAME}:{ITEM.VALUE}
当前状态: {TRIGGER.STATUS}
事件ID: {EVENT.ID}
#恢复操作内容一样,把故障改成恢复
用户使用的是 Admin 和组 Zabbix administrators
5.admin用户添加 wechat 报警媒介
集成---> 监控工具---> zabbix(免费只能加两个监控,穷啊!)
zabbix服务端安装Agent
appkey:b1a40a79-feca-fc63-eab4-a9990b96a997
[root@zabbix /]# cd /usr/lib/zabbix/alertscripts #编译安装的路径 [root@zabbix /usr/lib/zabbix/alertscripts]# wget https://download.aiops.com/ca_agent/zabbix/ca_zabbix_release-2.1.0.tar.gz [root@zabbix /usr/lib/zabbix/alertscripts]# tar -xzf ca_zabbix_release-2.1.0.tar.gz [root@zabbix /usr/lib/zabbix/alertscripts]# cd cloudalert/bin [root@zabbix /usr/lib/zabbix/alertscripts/cloudalert]# bash install.sh b1a40a79-feca-fc63-eab4-a9990b96a997 #码是自动生成的。 Zabbix管理地址: http://10.0.0.71/zabbix/ Zabbix管理员账号: Admin Zabbix管理员密码:
如果之前有创建,请把相应的动作,用户,用户组,报警媒介类型删掉,否则会出错。
用户:cloudalert
用户群组:cloudalert group
动作:cloudalert action
报警媒介类型:cloudalert media
添加用户策略。
#因为是免费试用,或者网络原因,电话可能不能及时相应。
[root@zabbix /]# cd /usr/share/zabbix/assets/fonts [root@zabbix-server fonts]# ls graphfont.ttf [root@zabbix-server fonts]# [root@zabbix-server fonts]# ls graphfont.ttf STZHONGS.TTF [root@zabbix-server fonts]# mv graphfont.ttf graphfont.ttf.bak [root@zabbix-server fonts]# mv MSYH.TTC graphfont.ttf [root@zabbix /]# ll /etc/alternatives/zabbix-web-font ##zabbix默认的字符集 lrwxrwxrwx 1 root root 44 Dec 8 12:29 /etc/alternatives/zabbix-web-font -> /usr/share/zabbix/assets/fonts/graphfont.ttf [root@zabbix-server fonts]# systemctl restart zabbix-server
方法二:安装开源字符集
wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-6.repo
zabbix服务器端安装开源的字符集:
[root@zabbix /]# yum -y install wqy-microhei-fonts [root@zabbix /]# rpm -ql wqy-microhei-fonts /etc/fonts/conf.d/65-0-wqy-microhei.conf /usr/share/doc/wqy-microhei-fonts-0.2.0 /usr/share/doc/wqy-microhei-fonts-0.2.0/LICENSE_Apache2.txt /usr/share/doc/wqy-microhei-fonts-0.2.0/LICENSE_GPLv3.txt /usr/share/doc/wqy-microhei-fonts-0.2.0/README.txt /usr/share/fontconfig/conf.avail/65-0-wqy-microhei.conf /usr/share/fonts/wqy-microhei /usr/share/fonts/wqy-microhei/wqy-microhei.ttc [root@zabbix /]# ll /etc/alternatives/zabbix-web-font ##zabbix默认的字符集 lrwxrwxrwx 1 root root 46 Dec 8 12:02 /etc/alternatives/zabbix-web-font -> /usr/share/fonts/wqy-microhei/wqy-microhei.ttc #删除默认软连接指向的字符集,指向安装的字符集 [root@zabbix /]# rm -f /etc/alternatives/zabbix-web-font [root@zabbix /]# ln -s /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /etc/alternatives/zabbix-web-font [root@zabbix /]# ll /etc/alternatives/zabbix-web-font lrwxrwxrwx 1 root root 46 Dec 8 12:02 /etc/alternatives/zabbix-web-font -> /usr/share/fonts/wqy-microhei/wqy-microhei.ttc 不要忘记重启zabbix-server
[root@zabbix /]# mkdir -p /server/tools/ [root@zabbix /]# cd /server/tools/ [root@zabbix /server/tools]# wget https://mirrors.tuna.tsinghua.edu.cn/grafana/yum/rpm/grafana-6.5.1-1.x86_64.rpm [root@zabbix /]# yum -y localinstall grafana-6.5.1-1.x86_64.rpm #软件包不用安装,安装软件包依赖 #启动grafana服务 [root@zabbix /]# systemctl start grafana-server.service [root@zabbix /]# systemctl enable grafana-server.service
3. 登录grafana
修改网站主题:
安装zabbix插件,因为在grafana中默认没有zabbix插件需要手动安装。
4. 安装zabbix插件
原理:granfana -(zabbix插件)-> zabbix-server --> zabbix-agent (收集主机监控项信息)
# 1.查找grafana插件信息: [root@zabbix /]# grafana-cli plugins list-remote|grep zabbix #查找需要安装的插件 id: alexanderzobnin-zabbix-app version: 3.10.4 # 2.安装grafana插件信息: [root@zabbix /]# grafana-cli plugins install alexanderzobnin-zabbix-app installing alexanderzobnin-zabbix-app @ 3.10.4 from: https://grafana.com/api/plugins/alexanderzobnin-zabbix-app/versions/3.10.4/download into: /var/lib/grafana/plugins ✔ Installed alexanderzobnin-zabbix-app successfully Restart grafana after installing plugins . <service grafana-server restart> # 3.重启服务 [root@zabbix /]# systemctl restart grafana-server.service
5. 添加zabbix源信息
在下面有一个 Save & Test 点击保存!会出现绿色提示信息
导入模板:
最终结果: