Linux 监控-zabbix 监控介绍
Linux 监控
常见开源监控软件
cacti、nagios、zabbix、smokeping、open-falcon等等
cacti、smokeping偏向于基础监控,成图非常漂亮
cacti、nagios、zabbix服务端监控中心,需要php环境支持,其中zabbix和cacti都需要mysql作为数据存储,nagios不用存储历史数据,注重服务或者监控项的状态,zabbix会获取服务或者监控项目的数据,会把数据记录到数据库里,从而可以成图
open-falcon为小米公司开发,开源后受到诸多大公司和运维工程师的追捧,适合大企业,滴滴、360、新浪微博、京东等大公司在使用这款监控软件,值得研究
后续以介绍zabbix为主
1. zabbix 监控介绍
C/S架构,基于C++开发,监控中心支持web界面配置和管理; 单server节点可以支持上万台客户端; 最新版本3.4,官方文档https://www.zabbix.com/manuals
1.1 zabbix组件
- zabbix-server 监控中心,接收客户端上报信息,负责配置、统计、操作数据;
- 数据存储,存放数据(如:mysql);
- web界面 也叫web UI,在web界面下操作配置是zabbix简单易用的主要原因;
- zabbix-proxy 可选组件,它可以代替zabbix-server的功能,减轻server的压力;
- zabbix-agent 客户端软件,负责采集各个监控服务或项目的数据,并上报。
1.2 zabbix监控流程图
2. zabbix 安装
2.1 zabbix 服务端部署
2.1.1 zabbix 获取
官网下载地址:www.zabbix.com/download
获取zabbix的yum源库:wget repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
2.1.2 安装zabbix
rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm
//这个是安装zabbix的yum源仓库
yum install -y zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql
//会连带安装httpd和php
zabbix-agent 客户端软件;
zabbix-get 服务端的工具, (可以通过命令行的形式获取客户端的监控数据);
zabbix-server-mysql 安装一些和MySQL相关的数据;
zabbix-web web的界面;
zabbix-web-mysql Web界面和MySQL相关的插件
2.1.3 安装MySQL数据库
具体安装步骤:略
-
修改MySQL配置文件,设置默认字符集
vim /etc/my.cnf
//需要增加配置
character_set_server = utf8
-
重启mysqld服务
-
创建zabbix库:
create database zabbix character set utf8;
-
创建用户:
grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by 'aming-zabbix';
-
导入数据:
cd /usr/share/doc/zabbix-server-mysql-3.2.7
gzip -d create.sql.gz
mysql -uroot -pxxx zabbix < create.sql
-
启动apache
systemctl start httpd
systemctl enable httpd
-
修改zabbix配置
vim /etc/zabbix/zabbix_server.conf
//修改或增加
DBHost=127.0.0.1 //在DBName=zabbix上面增加
DBPassword=aming-zabbix //在DBuser下面增加
-
启动zabbix服务
systemctl start zabbix-server zabbix-agent
systemctl enable zabbix-server zabbix-agent
-
检查、测试
netstat -lntp |grep zabbix
//查看监听端口
浏览器访问http://ip/zabbix/
web界面下面配置zabbix(用户名Admin 密码zabbix); 进入后台第一件事情就是修改密码。 -
忘记Admin密码如何做
进入mysql命令行,选择zabbix库
mysql -uroot -p zabbix
update users set passwd=md5(‘newpasswd’) where alias=‘Admin’;
// 这样就更改了Admin用户的密码
2.1.4 zabbix客户端部署
-
获取yum源:
wget repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
-
安装yum源:·
rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm
-
安装zabbix客户端程序:
yum install -y zabbix-agent
-
修改zabbix客户端配置文件:
vim /etc/zabbix/zabbix_agentd.conf
//修改如下配置
Server=127.0.0.1修改为Server=192.168.133.130 //定义服务端的ip(被动模式)
ServerActive=127.0.0.1修改为ServerActive=192.168.133.130 //定义服务端的ip(主动模式)
Hostname=Zabbix server修改为Hostname=aming-123 //这是自定义的主机名,一会还需要在web界面下设置同样的主机名
- 启动客户端程序
systemctl start zabbix-agent
systemctl enable zabbix-agent
3. zabbix 配置使用
3.1 主动模式和被动模式
主动或者被动是相对客户端来讲
-
被动模式,服务端会主动连接客户端获取监控项目数据,客户端被动地接受连接,并把监控信息传递给服务端;
-
主动模式,客户端会主动把监控数据汇报给服务端,服务端只负责接收即可;
-
主、被动模式适应的场景:当客户端数量非常多时,建议使用主动模式,这样可以降低服务端的压力;服务端有公网ip,客户端只有内网ip,但却能连外网,这种场景适合主动模式。
3.2 添加主机
先添加主机组web_group
;再添加主机,主机名称和可见名称都写wbe_01,群组选择web_group
;IP地址填写客户端的ip。
-
主机组:配置-->主机群组-->创建主机群组;
-
添加主机:配置-->主机--创建主机;
3.3 添加模板:可以自定义一个常用模板,方便给新增主机添加监控项目
-
几个概念:应用集、监控项、触发器、图形、自动发现、web监测
-
自定义web模板
把其他自带模板里面的某些监控项目(比如cpu、内存等)复制到web模板里- 方法1. 将已有的模板导出,导出的为xml文件,对xml进行编辑,然后重新导入即可;(此方法不推荐使用,可能会出现错误)
- 方法2. 配置-->模板-->创建模板;打开创建的模板-->链接的模板-->连接指示器,选择需要借鉴的模板,然后点击添加(添加一定要点击),然后点击更新;重新打开新建的模板,选择链接的模板-->链接的模板-->取消链接(不要点击取消链接并清理);点击更新,复制完成。(建议使用此方法复制模板,去自定义)
-
定义触发器
-
添加图形
-
自动发现,找到Template OS Linux,点击右侧的自动发现,参考Mounted filesystem discovery和Network interface discovery定义规则;可以直接导出、导入模板,然后再删除不需要的对象
3.4 处理图形乱码
-
问题:设置为中文后,zabbix图形的中文文字会显示小方框;
-
解决:在windows字体库找到
simfang.ttf
(其实就是那个仿宋简体),路径为C:\Windows\Fonts\
,,先把它复制到桌面上,然后上传到linux的/usr/share/zabbix/fonts/
,并且改名为graphfont.ttf
,即可。
设置为中文后,zabbix图形的中文文字会显示小方框;这是因为在zabbix的字体库中没有中文字体,需要从windows上借用一个过来;
vim /usr/share/zabbix/include/defines.inc.php
//搜索ZBX_FONTPATH,它定义的路径是“fonts”,它是一个相对路径,绝对路径为/usr/share/zabbix/fonts
,而字体文件为ZBX_GRAPH_FONT_NAME
所定义的graphfont
,它是一个文件,绝对路径为/usr/share/zabbix/fonts/graphfont
3.5 添加自定义监控项目
-
需求:监控某台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.133.132 -p 10050 -k 'my.estab.count'
然后在zabbix监控中心(浏览器)配置增加监控项目,键值写my.estab.count;添加该项目后,到“监测中”“最新数据”查看刚添加的项目是否有数据出现;有了数据就可以添加图形,“配置-->主机-->图形-->创建图形”。
3.6 配置告警
使用163或者QQ邮箱发告警邮件,首先登录你的163邮箱,设置开启POP3、IMAP、SMTP服务,开启并记录授权码;
然后到监控中心设置邮件告警“管理-->报警媒介类型-->创建媒体类型”。
-
脚本参数:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
-
创建报警脚本
mail.py
vim /usr/lib/zabbix/alertscripts/mail.py
//内容参考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.py
chmod 755 /usr/lib/zabbix/alertscripts/mail.py
//设置脚本权限 -
mail.py
脚本内容
#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import os,sys
reload(sys)
sys.setdefaultencoding('utf8')
import getopt
import smtplib
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from subprocess import *
#
def sendqqmail(username,password,mailfrom,mailto,subject,content):
gserver = 'smtp.qq.com'
gport = 25
#
try:
# msg = MIMEText(unicode(content).encode('utf-8')) //如果发送的邮件有乱码,可以尝试把这行改成如下:
msg = MIMEText(content,'plan','utf-8')
msg['from'] = mailfrom
msg['to'] = mailto
msg['Reply-To'] = mailfrom
msg['Subject'] = subject
#
smtp = smtplib.SMTP(gserver, gport)
smtp.set_debuglevel(0)
smtp.ehlo()
smtp.login(username,password)
#
smtp.sendmail(mailfrom, mailto, msg.as_string())
smtp.close()
except Exception,err:
print "Send mail failed. Error: %s" % err
#
#
def main():
to=sys.argv[1]
subject=sys.argv[2]
content=sys.argv[3]
##定义QQ邮箱的账号和密码,你需要修改成你自己的账号和密码(请不要把真实的用户名和密码放到网上公开,否则你会死的很惨)
sendqqmail('1234567@qq.com','aaaaaaaaaa','1234567@qq.com',to,subject,content)
#
if __name__ == "__main__":
main()
#
#
#####脚本使用说明######
#1. 首先定义好脚本中的邮箱账号和密码
#2. 脚本执行命令为:python mail.py 目标邮箱 "邮件主题" "邮件内容"
- 创建一个接受告警邮件的用户,“管理-->用户-->创建用户-->报警媒介-->类型选择“baojing”;注意用户的权限,如果没有需要到用户组去设置权限,
- 设置动作,“配置-->动作-->创建动作”,名称写“sendmail”(自定义),“新的触发条件”,A维护状态 非在 维护,B触发器示警度>=未分类
- “操作-->消息内容”页面,内容如下
HOST:{HOST.NAME} {HOST.IP}
TIME:{EVENT.DATE} {EVENT.TIME}
LEVEL:{TRIGGER.SEVERITY}
NAME:{TRIGGER.NAME}
messages:{ITEM.NAME}:{ITEM.VALUE}
ID:{EVENT.ID}
“操作-->新的”,选择发送的用户为刚创建的用户,仅送到选择“baojing”
切换到“恢复操作”,把信息改成如下
HOST:{HOST.NAME} {HOST.IP}
TIME:{EVENT.DATE} {EVENT.TIME}
LEVEL:{TRIGGER.SEVERITY}
NAME:{TRIGGER.NAME}
messages:{ITEM.NAME}:{ITEM.VALUE}
ID:{EVENT.ID}
点击“新的-->操作”,选择发送的用户为刚创建的用户,仅送到选择“baojing”
- 测试告警