Linux监控平台介绍
常见开源监控软件
- cacti、nagios、zabbix、smokeping、open-falcon等。
- cacti、smokeping偏向于基础监控,成图非常漂亮。
- cacti、nagios、zabbix服务端监控中心,需要php环境支持,其中zabbix和cacti都需要mysql作为数据存储,nagios不用存储历史数据,注重服务或者监控项的状态, zabbix会获取服务或者监控项目的数据,会把数据记录到数据库里,从而可以成图。
- open-falcon为小米公司开发,开源后受到诸多大公司和运维工程师的追捧,适合大企业,滴滴、360、新浪微博、京东等大公司在使用这款监控软件。
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监控流程图
1.安装Zabbix服务端(192.168.6.120)
官网下载地址:www.zabbix.com/download
下载并安装:
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-get zabbix-server-mysql zabbix-web zabbix-web-mysql
修改MySQL配置文件/etc/my.cnf,增加一行内容:
character_set_server = utf8
然后重启mysqld服务,进入mysql命令行,创建zabbix库和用户,并导入数据。
- /etc/init.d/mysqld restart /重启mysqld服务
- mysql -uroot -p'123456' /进入mysql命令行
- create database zabbix character set utf8; /创建zabbix库
- grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by 'zabbix'; /创建zabbix用户
退出mysql,然后导入数据:
cd /usr/share/doc/zabbix-server-mysql-3.2.11/
gzip -d create.sql.gz
mysql -uroot -p'123456' zabbix < create.sql
启动httpd服务:
systemctl start httpd; systemctl enable httpd /如果报错,一般是80端口被占用,关闭nginx即可。
编辑zabbix的配置文件:
vim /etc/zabbix/zabbix_server.conf
在DBName=zabbix上面增加一行:DBHost=127.0.0.1
在DBuser下面增加一行:DBPassword=zabbix
保存后退出,启动zabbix服务:
systemctl start zabbix-server /启动zabbix
systemctl enable zabbix-server /开机启动
可以看到zabbix服务端监听的端口是10051:
[root@jin-120 zabbix-server-mysql-3.2.11]# netstat -lntp |grep zabbix
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 3113/zabbix_server
tcp6 0 0 :::10051 :::* LISTEN 3113/zabbix_server
- 然后在windows浏览器中输入192.168.6.120/zabbix进入zabbix的安装界面,点下一步(如果浏览器打不开页面,把防火墙关了)
- 看到一处Fail,看错误提示是PHP没有设定时区,编辑文件/etc/php.ini,搜索timezone,把date.timezone前面的;去掉,并修改为date.timezone = Asia/Shanghai,保存后退出并重启httpd服务systemctl restart httpd。
- 再刷新zabbix的安装界面,此时会显示全部OK,再点击下一步
- 将Database host改为127.0.0.1,然后输入之前设置的密码,再点击下一步
- Name那一栏输入jin-120(具体看你的主机名),再点下一步确认安装信息,无误后再点完成,此时会跳转到zabbix的登录界面
- 输入用户admin和密码zabbix登录
- 选择Administration项,再选择Users,然后点击Admin,修改Admin的密码
- 修改密码并更改语言为中文,退出再重新登录,可以看到,已显示为中文界面
2.安装zabbix客户端(192.168.6.123)
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
修改配置文件:vim /etc/zabbix/zabbix_agentd.conf
Server=127.0.0.1修改为Server=192.168.6.120 //定义服务端的ip(被动模式)
ServerActive=127.0.0.1修改为ServerActive=192.168.6.120 //定义服务端的ip(主动模式)
Hostname=Zabbix server修改为Hostname=jin-123 //这是自定义的主机名,一会还需要在web界面下设置同样的主机名
systemctl start zabbix-agent
systemctl enable zabbix-agent
查看zabbix-agent监听的端口,可以发现,客户端监听的端口是10050:
[root@jin-123 src]# netstat -lntp |grep zabbix
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 1731/zabbix_agentd
tcp6 0 0 :::10050 :::* LISTEN 1731/zabbix_agentd
至此,Zabbix服务端和客户端安装均已完成。
3.解决图形界面中文乱码的问题:
在服务端(120)上查看文件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
windows字体路径为“C:\Windows\Fonts\”,找到“simhei.ttf”(其实就是那个黑体简体),先把它复制到桌面上,然后上传到linux的/usr/share/zabbix/fonts/,并且改名为graphfont.ttf。
mv /root/simhei.ttf /usr/share/zabbix/fonts/
mv graphfont.ttf graphfont.ttf.bak
ln -s simhei.ttf graphfont.ttf
[root@jin-120 fonts]# ll
总用量 9524
lrwxrwxrwx 1 root root 10 1月 19 22:09 graphfont.ttf -> simhei.ttf
lrwxrwxrwx 1 root root 33 1月 19 11:28 graphfont.ttf.bak -> /etc/alternatives/zabbix-web-font
-rw-r--r-- 1 root root 9751960 6月 11 2009 simhei.ttf
此时再刷新图形界面,就可以看到中文正常显示了。
4.创建自动发现规则,发现网络上的主机并监控
点击配置-自动发现-创建发现规则
名称:自动发现网络主机(自定义),IP范围:192.168.0.1-254,检查类型:SSH,然后点”添加“。
5.添加监控项目
(1)监控各个主机基础指标,CPU,内存,硬盘,网卡流量成图,web站点的可用性 。
添加主机:
先添加主机组zhangjin-test,再添加主机,创建主机,主机名称和可见名称都写jin-123,群组选择zhangjin-test ,IP地址填写客户端的ip 192.168.6.123
创建模板:
模板名称:test,群组选择Templates,链接的模板选择Template OS Linux,然后点添加,再选择“取消链接”,点更新。
自动发现网卡和硬盘 :
把两个自动发现的更新时间修改为 30s, 当图形中有了自动发现的图形后可以改回30m 或者1h。
这两个自动发现会自动创建网卡流量和硬盘状态的图形。
检测web站点的可用性 :
在zbx-server中写入一条 hosts:
echo '192.168.6.123 www.test-zabbix.com' >> /etc/hosts
在zabbix的web页面选择 配置 -- 主机 -- zbx-server -- web监测 -- 右上角创建web场景
场景选项卡中填写
名称:web可用性检测
新的应用集: web_check
客户端:随意选择一个,这里选择的是“Chrome 38.0(Windows)”
步骤选项卡填写:
点击步骤框中的添加,添加一个步骤, 填写一个自定义的步骤名称 填写要检测的站点的URL: http://www.baidu.com 填写最下面的状态码 200 ,点击最下边的添加按钮完成步骤的添加。
点击添加按钮完成web场景的添加。
再按照前面的步骤将web站点也添加上。
添加完成过几十秒就可以在监测中 -- web检测 中查看状态了。
(2)监控web服务器(80端口)的并发连接数 。
在客户端目录/usr/local/sbin下编写一个名为estab.sh的脚本,内容如下:
#!/bin/bash
##获取80端口并发连接数
netstat -ant |grep ':80 ' |grep -c ESTABLISHED
授授予755权限
chmod 755 /usr/local/sbin/estab.sh
再编辑zabbix客户端的配置文件:vim /etc/zabbix/zabbix_agentd.conf,搜索UnsafeUserParameters,去掉前面的#号,并把0改为1,再搜索UserParameter,去掉前面的#号,并在后面加上=my.estab.count[*],/usr/local/sbin/estab.sh,保存后退出并重启客户端的zabbix服务:
systemctl restart zabbix-agent
再到服务端执行以下命令进行验证:
[root@jin-120 ~]# zabbix_get -s 192.168.6.123 -p 10050 -k 'my.estab.count'
0
其中,参数-s表示源地址,-p表示端口,-k表示键,结果为0,表示没有任何连接。
进入zabbix服务器的web页面,给主机创建监控项,名字为“并发连接数”,键值为“my.estab.count”,其他保持默认。
再给主机创建图形,名字为“并发连接数”,监控项添加并发连接数,,然后添加。
再选择触发器,创建触发器,表达式为“{jin-123:my.estab.count.last()}>100”,其他默认,然后保存。
(3)检测Mysql队列,超过300报警
在客户端中进入目录/usr/local/sbin,编写名称为process_count.sh的脚本,内容如下:
[root@jin-123 ~]# cd /usr/local/sbin
[root@jin-123 sbin]# vim process_count.sh
#!/bin/bash
export MYSQL_PWD=123456
process_count=`mysql -uroot -e "SHOW FULL PROCESSLIST" |wc -l`
echo $process_count
保存并赋予x权限后,修改客户端的配置文件zabbix_agentd.conf,搜索UserParameter,并将其路径更改为:process.count[*],/usr/local/sbin/process_count.sh,然后重启zabbix客户端:
systemctl restart zabbix-agent
在浏览器进入zabbix网页,选择“配置”-->“主机”-->“监控项”-->“创建监控项”
名称写“检测Mysql队列”,键值填写“process.count[*]”,其他默认,然后点“添加”。
再选择“配置”-->“主机”-->“触发器”-->“创建触发器”
名称为“jin-123: 检测Mysql队列”,严重性选择“警告”,表达式为“{jin-123:process.count[*].last()}>300”,然后点“添加”即可。
(4)监控mysql的慢查询日志,每分钟超过60条日志需要告警。
客户端中进入目录/usr/local/sbin,编写名称为slow_query_count.sh的脚本,内容如下:
#!/bin/bash
slow_log=/data/mysql/dbm-slow.log
grep 'timestamp' $slow_log | awk -F '=' '{print $2}' |awk -F ';' '{print $1}'|sort -r > /tmp/timestamp.log
now=`sed -n '1'p /tmp/timestamp.log`
alert_num=60
one_min_ago=$[$now-60]
num=0
##### 判断两个时间戳之前的差值
slow_query_sum() {
if [ $1 -ge $2 ]
then
num=$[$num+1]
else
break
fi
}
##### 获取在一分钟内的慢查询数
for n in `cat /tmp/timestamp.log`
do
slow_query_sum $n $one_min_ago
done
##### 删除临时文件
rm -f /tmp/timestamp.log
# There are $num slow query in a minute.
echo $num
保存后赋予x权限,然后更改配置文件zabbix-agentd.conf,搜索UserParameter,将其路径改为:slow.query.count[*],/usr/local/sbin/slow_query_count.sh,再重启zabbix-agent服务。
systemctl restart zabbix-agent
在浏览器进入zabbix网页,选择“配置”-->“主机”-->“监控项”-->“创建监控项”
名称写“Mysql的慢查询日志”,键值填写“slow.query.count[*]”,其他默认,然后点“添加”。
再选择“配置”-->“主机”-->“触发器”-->“创建触发器”
名称为“jin-123: Mysql的慢查询日志”,严重性选择“警告”,表达式为“{jin-123:slow.query.count[*].last()}>60”,然后点“添加”即可。
(5)利用jmx,在zabbix上监控tomcat
之前的zabbix安装方式是yum安装的,我们再用源码包安装,进入目录/usr/local/src,下载zabbix安装包,解压并编译安装:
[root@jin-120 src]# wget https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.4.12/zabbix-3.4.12.tar.gz
[root@jin-120 src]# tar zxf zabbix-3.4.12.tar.gz
[root@jin-120 src]# cd zabbix-3.4.12
[root@jin-120 zabbix-3.4.12]# ./configure --prefix=/usr/local/zabbix-3.4.2 --enable-server --enable-agent --enable-java --with-mysql=/usr/local/mysql/bin/mysql_config --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-openipmi --with-unixodbc --with-openssl --enable-java
[root@jin-120 zabbix-3.4.12]# make
[root@jin-120 zabbix-3.4.12]# make install
安装完成后,编辑文件/usr/local/zabbix-3.4.2/sbin/zabbix_java/settings.sh,更改以下字段的值
LISTEN_IP="0.0.0.0"
LISTEN_PORT=10052
PID_FILE="/tmp/zabbix_java.pid"
START_POLLERS=5
TIMEOUT=3
编辑zabbix服务端的配置文件/usr/local/zabbix-3.42/etc/zabbix_server.conf,内容如下:
LogFile=/tmp/zabbix_server.log //指明zabbix_server的日志文件地址
DBHost=localhost //连接的数据库地址
DBName=zabbix //连接的数据库名称
DBUser=zabbix //连接数据库的用户名
DBPassword=zabbix //连接数据库密码
JavaGateway=192.168.6.120 //java网关地址,即server端ip地址
JavaGatewayPort=10052 //java网关监听端口
Timeout=20 //超时时间
FpingLocation=/usr/sbin/fping //fping命令绝对地址
LogSlowQueries=3000
AllowRoot=1 //允许root启动
User=root //zabbix服务的启动用户
StartPollers=50
StartPingers=100
StartJavaPollers=5
AlertScriptsPath=/usr/local/zabbix3.4.2/share/zabbix/alertscripts //zabbix额外的脚本地址
拷贝源码包的启动脚本到/etc/init.d
[root@jin-120 zabbix-3.4.12]# cd /usr/local/src/zabbix-3.4.12/misc/init.d/fedora/core
[root@jin-120 core]# ls
zabbix_agentd zabbix_server
[root@jin-120 core]# cp zabbix_* /etc/init.d/
[root@jin-120 core]# ln -s /usr/local/zabbix-3.4.2/etc/ /etc/zabbix
修改启动脚本:
[root@jin-120 core]# sed -i "s#BASEDIR=/usr/local#BASEDIR=/usr/local/zabbix-3.4.2/#g" /etc/init.d/zabbix_server
[root@jin-120 core]# sed -i "s#BASEDIR=/usr/local#BASEDIR=/usr/local/zabbix-3.4.2/#g" /etc/init.d/zabbix_agentd
重启zabbix server服务,以及启动zabbix java支持服务
[root@jin-120 core]# /etc/init.d/zabbix_server restart
Reloading systemd: [ 确定 ]
Restarting zabbix_server (via systemctl): [ 确定 ]
[root@jin-120 core]# cd /usr/local/zabbix-3.4.2/sbin/zabbix_java && sh startup.sh
修改tomcat的配置文件/vim /usr/local/tomcat/bin/catalina.sh,在第2行添加以下内容:
CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=12345 -Djava.rmi.server.hostname=192.168.6.123"
重启tomcat应用服务器,同时查看端口12345是否处于监听状态。
[root@jin-120 bin]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk1.8
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@jin-120 bin]# netstat -lntp |grep 12345
tcp6 0 0 :::12345 :::* LISTEN 27241/java
下载对应的java jmx监控的相关jar包并复制到tomcat对应的目录下。
[root@jin-120 tomcat]# cd /usr/local/src
[root@jin-120 src]# wget http://archive.apache.org/dist/tomcat/tomcat-8/v8.5.32/bin/extras/catalina-jmx-remote.jar
[root@jin-120 src]# cp catalina-jmx-remote.jar /usr/local/tomcat/lib/
然后在zabbix网页中添加对应的模板即可。