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网页中添加对应的模板即可。