一、常见开源监控软件
• cacti、nagios、zabbix、smokeping、open-falcon等等
• cacti、smokeping偏向于基础监控,成图非常漂亮
• cacti、nagios、zabbix服务端监控中心,需要php环境支持,其中zabbix和cacti都需要mysql作为数据存储,nagios不用存储历史数据,注重服务或者监控项的状态,zabbix会获取服务或者监控项目的数据,会把数据记录到数据库里,从而可以成图
• open-falcon为小米公司开发,开源后受到诸多大公司和运维工程师的追捧,适合大企业,滴滴、360、新浪微博、京东等大公司在使用这款监控软件,值得研究
• 后续以介绍zabbix为主
二、zabbix监控介绍
• C/S架构,基于C++开发,监控中心支持web界面配置和管理
• 单server节点可以支持上万台客户端
• 最新版本3.4,官方文档https://www.zabbix.com/manuals
• 5个组件
• zabbix-server 监控中心,接收客户端上报信息,负责配置、统计、操作数据
• 数据存储 存放数据,比如mysql
• web界面 也叫web UI,在web界面下操作配置是zabbix简单易用的主要原因
• zabbix-proxy 可选组件,它可以代替zabbix-server的功能,减轻server的压力
• zabbix-agent 客户端软件,负责采集各个监控服务或项目的数据,并上报
三、zabbix监控流程图
四、安装zabbix
官网下载地址 www.zabbix.com/download
需要2台机器
0.236为服务端
0.182为客户端
wget repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm //客户端和服务端都执行下载命令
rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm //客户端和服务端都执行安装命令,实际为安装了yum源仓库
cat /etc/yum.repos.d/zabbix.repo //有了这个yum源后就可以使用yum安装zabbix
yum install -y zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql //服务端上执行安装命令
说明:
zabbix-agent:zabbix客户端,用来收集客户端各种参数
zabbix-get:服务端的一个工具,可以通过命令行的模式获得客户端的某些监控源数据
zabbix-server-mysql:安装mysql文件
zabbix-web:zabbix要使用web界面,这个包是用来处理Apache和php,mysql等之间的依赖关系
zabbix-web-mysql:web和mysql相关的工具
会连带安装httpd和php
如果mysql之前没有安装的话,需要根据lamp那一章的mysql安装方法安装mysql,此处已安装
ps aux |grep mysql //检查mysql是否启动
vim /etc/my.cnf //编辑mysql配置文件,设置字符集,防止web界面设置成中文,显示有问题
character_set_server = utf8
systemctl restart mysql //重启mysqld服务
mysql -uroot -pabc123 //进入mysql命令行
mysql> create database zabbix character set utf8; //创建zabbix库
mysql> grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by 'abc-123'; //创建用户,为了让php代码连接mysql,服务端启动是也是需要连接mysql
退出数据库
cd /usr/share/doc/zabbix-server-mysql-3.2.11/ //进入数据目录
gzip -d create.sql.gz //解压压缩包
mysql -uroot -pabc123 zabbix < create.sql //将该文件导入到zabbix库里面
systemctl start zabbix-server //启动zabbix-server服务
systemctl enable zabbix-server //设置为开机启动
/etc/init.d/nginx stop //由于系统之前安装nginx,并启动,现需关闭,并确认无启动80端口
systemctl disable nginx //设置开机不启动nginx
chkconfig nginx off //从服务列表取消nginx服务开机启动
systemctl start httpd //此时就可以启动httpd服务
systemctl enable httpd //设置为开机启动
查看服务端口,zabbix-server未启动
less /var/log/zabbix/zabbix_server.log //查看zabbix日志,显示为连接数据库
vim /etc/zabbix/zabbix_server.conf //修改zabbix配置文件
搜索DBHost,在下面一行增加DBHost=127.0.0.1 //表示连接到数据库的ip,此处mysql安装在本机,定义的来源IP为127.0.0.1
分别搜索DBName、DBUser,确认是否为自定义的zabbix,并在DBUser下面增加一行用户密码
systemctl restart zabbix-server //重启zabbix服务
netstat -nltp //查看监听端口,zabbix服务端口已启动
浏览器访问http://ip/zabbix/ web界面下面配置zabbix,IP为服务端IP192.168.0.236
首次打开,选择下一步
需要配置php的配置文件
vim /etc/php.ini //进入php配置文件,搜索timezone,修改如下内容
systemctl restart httpd //重启httpd服务
重新刷新web界面,检测通过,继续点击下一步
编辑数据库的相关信息
继续下一步
显示配置的信息,继续下一步
此时web界面已配置完成
默认的用户名Admin 密码zabbix
进入后台第一件事情就是修改密码
进入Administration--Users--Admin
选择Password这些,点击修改密码
输入新密码,并确认密码,同时修改web界面为中文
重新刷新界面,此时显示为中文
退出,重新用新密码登陆
五、忘记Admin密码如何做
mysql -uroot -pabc123 //进入mysql
mysql> use zabbix; //进入zabbix库
mysql> show tables; //查看zabbix库里面的所有表
mysql> desc users; //密码存放在user表里面,查看user表有哪些字段
mysql> update users set passwd=md5('abc-123456') where alias='Admin'; //更改Admin密码
mysql> select * from users; //查看所有的用户
退出zabbix,使用新密码,重新登陆正常
六、Zabbix客户端安装
在客户端上也需要下载zabbix的yum源
wget repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm //下载安装包
rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm //执行安装命令
yum install -y zabbix-agent //安装zabbix-agent
vim /etc/zabbix/zabbix_agentd.conf //修改如下配置
Server=127.0.0.1修改为Server=192.168.0.236//定义服务端的ip(被动模式)
ServerActive=127.0.0.1修改为ServerActive=192.168.0.236 //定义服务端的ip(主动模式)
Hostname=Zabbix server修改为Hostname=study-02 //这是自定义的主机名,一会还需要在web界面下设置同样的主机名
systemctl start zabbix-agent //启动服务
ps aux |grep zabbix //检查服务是否启动
netstat -nltp //查看监听端口
systemctl enable zabbix-agent //设置开机启动
七、主动模式和被动模式
• 主动或者被动是相对客户端来讲的
• 被动模式,服务端会主动连接客户端获取监控项目数据,客户端被动地接受连接,并把监控信息传递给服务端
• 主动模式,客户端会主动把监控数据汇报给服务端,服务端只负责接收即可。
• 当客户端数量非常多时,建议使用主动模式,这样可以降低服务端的压力。
• 服务端有公网ip,客户端只有内网ip,但却能连外网,这种场景适合主动模式
八、添加主机
• 先添加主机组study-group
打开web界面:配置--主机群组--创建主机群组
输入定义的群组名称,点击添加
添加完成
• 再添加主机,主机名称和可见名称都写study-02(之前客户端定义的Hostname)
• 群组选择study-group
• IP地址填写客户端的ip 192.168.0.182
配置--主机--创建主机
添加主机
添加完成
• 几个概念:应用集、监控项、触发器、图形、自动发现、web监测
应用集:监控项目集合,为了更方便管理监控项目
监控项:监控所有的项目
触发器:针对某一个监控项目设置一个告警规则,可以定义告警级别,不同级别显示的颜色不一样
图形:历史数据组成的图表
自动发现:2层含义,磁盘分区、网卡信息
web监测:监控某一个网站
九、添加自定义模板
• 可以自定义一个常用模板,方便给新增主机添加监控项目
配置--模板--创建模板
• 自定义study模板
添加完成
• 把其他自带模板里面的某些监控项目(比如cpu、内存等)复制到study模板里
复制 Template OS Linux里面的监控项到study模板
勾选需要的监控项,复制到study模板
复制到study模板
查看已添加的监控项模板:配置--模板
找到study模板,选择监控项
同样可以复制定义触发器、添加图形
自动发现,找到Template OS Linux,点击右侧的自动发现,参考Mounted filesystem discovery和Network interface discovery定义规则,由于自动发现无复制
功能
方法一:可以直接导出模板,然后再删除不需要的对象,最后导入到study模板(比较麻烦,容易出错,不推荐)
方法二:先添加要链接的模板,然后取消链接,根据需求进行调整各个项目
先删除之前添加的监控项
配置--模板
找到study模板,点击监控项
删除添加的监控项
配置--模板--study
添加链接模板
模板已经复制完成
由于监控的项目太多,此时需要删除一下监控项,显示无法删除
原因是由于该模板链接到了 Template OS Linux,所以无法再study模板上操作
此时,需要进入study模板
配置--模板--study--链接的模板
取消链接模板
进入配置--模板,找到study模板,点击监控项
由于监控项是包含在应用集里面,所以要先删除监控项里面的项目才可以删除应用集里面的项目
删除监控项
此时就可以删除应用集
已删除应用集
删除图形选项
自动发现规则已保存
十、处理图形中乱码
将刚刚创建的study模板链接到study-02主机
配置--主机--study-02
添加关联模板
添加完成
查看图形
模板自带的2个图形
此时出现图形界面,但是不显示字体
设置为中文后,zabbix图形的中文文字会显示小方框
这是因为在zabbix的字体库中没有中文字体,需要从windows上借用一个过来
进入windows字体的路径:C:\Windows\Fonts
拷贝一个中文字体到windows桌面,这里选择的是隶书
vim /usr/share/zabbix/include/defines.inc.php //搜索ZBX_FONTPATH
将graphfont软链接到一个带中文支持中文字体的下面
按住ctrl+alt+f,打开xftp,找到复制的字体,双击发送到根目录下
mv /root/STLITI.TTF /usr/share/zabbix/fonts/ // 将字体移动到/usr/share/zabbix/fonts/目录下
cd /usr/share/zabbix/fonts/ //进入目录
mv graphfont.ttf graphfont.ttf.bak ; ln -s STLITI.TTF graphfont.ttf //将原来的字体更改名字,并将STLITI.TTF软链接到graphfont.ttf
查看最新数据,及图形
监测中--最新数据
监测--图形,选择对应的主机,查看监控的项目图形
如需查看更多图形,需进入,配置--主机,找到对应的主机study-02,点击图形
选择创建图形
添加图形
选择对应的监控项
确认添加
添加完成
点击查看系统负载预览,添加成功
由于自动发现规则的时间间隔为1小时才生成一次图形数据,需要将时间间隔修改为小一点
点击网卡这项
更改时间间隔为60秒
更新完成
为了更快生效,需重启客户端zabbix-agent和服务端zabbix-server
systemctl restart zabbix-server //服务端重启zabbix-server
systemctl restart zabbix-agent //客户端重启zabbix-agent
此时就可以看到网卡的流量
更改主机的图形风格及更新间隔
更改时间间隔
设置上传流量更新的时间间隔
十一、添加自定义监控项目
• 需求:监控某台web的80端口连接数,并出图
• 两步:1)zabbix监控中心创建监控项目;2)针对该监控项目以图形展现
• 对于第一步,需要到客户端定义脚本
• vim /usr/local/sbin/estab.sh //内容如下
#!/bin/bash
##获取80端口并发连接数
netstat -ant |grep ':80 ' |grep -c ESTABLISHED
• chmod 755 /usr/local/sbin/estab.sh //更改脚本权限
• 客户端上编辑配置文件 vim /etc/zabbix/zabbix_agentd.conf //增加
UnsafeUserParameters=1 //表示使用自定义脚本
UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh
//自定义监控项的key为my.estab.count,后面的[*]里面写脚本的参数,如果没有参数则可以省略,脚本为/usr/local/sbin/estab.sh
• 重启zabbix-agent服务 systemctl restart zabbix-agent
• 首先到服务端验证,执行命令
• zabbix_get -s 192.168.0.182 -p 10050 -k 'my.estab.count
•然后在zabbix监控中心(浏览器)配置增加监控项目
配置--主机,找到study-02,打开监控项
创建监控项
• 键值写my.estab.count
其他默认保存不变
添加完监控项后,嗨需要创建图形
图形创建完毕
图形显示正常
同时也可以创建触发器
创建触发器
设置条件
生成条件表达式
触发器设置成功
十二、配置告警
•使用163或者QQ邮箱发告警邮件
• 使用163邮箱,首先登录你的163邮箱,设置开启POP3、IMAP、SMTP服务
• 开启并记录授权码
• 然后到监控中心设置邮件告警
管理--报警媒介类型--创建媒体类型
• “管理”,“报警媒介类型”,“创建媒体类型”
• {ALERT.SENDTO} ,{ALERT.SUBJECT},{ALERT.MESSAGE}
添加成功
查看脚本存放的目录
vim /etc/zabbix/zabbix_server.conf //进入配置文件,搜索AlertScriptsPath
ls /usr/lib/zabbix/alertscripts/ //查看该目录为空
cd /usr/lib/zabbix/alertscripts/ //进入脚本存放目录
vim mail.py //编辑脚本,内容参考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail2.py
#!/usr/bin/python
#coding:utf-8
import smtplib
from email.mime.text import MIMEText
import sys
mail_host = 'smtp.163.com'
mail_user = '[email protected]'
mail_pass = '1111111'
mail_postfix = '163.com'
def send_mail(to_list,subject,content):
me = "zabbix 监控告警平台"+"<"+mail_user+"@"+mail_postfix+">"
msg = MIMEText(content, 'plain', 'utf-8')
msg['Subject'] = subject
msg['From'] = me
msg['to'] = to_list
try:
s = smtplib.SMTP()
s.connect(mail_host)
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])
chmod 755 /usr/lib/zabbix/alertscripts/mail.py //更改脚本权限
执行发送邮件命令
打开邮箱,信息接收成功
创建一个接受告警邮件的用户
管理--用户--创建用户
创建用户
点击用户,继续编辑
给用户添加告警媒介
添加完毕,点击更新
更新完成,继续点击用户
查看权限,如果没有需要到用户群组去设置权限
由于创建用户选择的是管理员组,此时需对管理员组进行操作
管理--用户群组
更改所有组的权限
添加后更新配置
更新后继续查看用户权限
管理--用户--yifeng--权限
用户设置完毕后,需要设置动作
配置--动作--创建动作
编辑触发器动作
编辑操作信息
默认信息:
HOST:{HOST.NAME} {HOST.IP}
TIME:{EVENT.DATE} {EVENT.TIME}
LEVEL:{TRIGGER.SEVERITY}
NAME:{TRIGGER.NAME}
messages:{ITEM.NAME}:{ITEM.VALUE}
ID:{EVENT.ID}
添加操作
添加完毕
编辑恢复操作信息
添加恢复操作
动作添加完毕
测试告警,创建一个自定义的触发器
配置--主机
找到名称为study-02的主机名称,点击触发器
创建触发器
添加触发器表达式
设置完毕,添加触发器
添加成功
监测中--仪表盘
查看邮件