19.1 Linux监控平台介绍

• 常见开源监控软件有cacti、nagios、zabbix、smokeping、open-falcon等等

• cacti、smokeping偏向于基础监控,成图非常漂亮

• cacti、nagios、zabbix服务端监控中心,需要php环境支持,其中zabbix和cacti都需要mysql作为数据存储,nagios不用存储历史数据,注重服务或者监控项的状态,zabbix会获取服务或者监控项目的数据,会把数据记录到数据库里,从而可以成图

• open-falcon为小米公司开发,开源后受到诸多大公司和运维工程师的追捧,适合大企业,滴滴、360、新浪微博、京东等大公司在使用这款监控软件,值得研究

19.2 zabbix监控介绍

• C/S架构,基于C++开发,监控中心支持web界面配置和管理

• 单server节点可以支持上万台客户端,虽然支持上万台,但监控的项目过多,采集数据的量太大,还是会导致zabbix效率降低;所以,当服务器大到一定规模的时候,就需要对zabbix进行优化。针对该问题,可以增加一些代理点,这些代理点充当server,替代server去采集数据,最终得到分析结果再汇报给主服务端server

• 最新版本3.4,官方文档https://www.zabbix.com/manuals

• 5个组件

1、zabbix-server 监控中心,接收客户端上报信息,负责配置、统计、操作数据

2、数据存储 存放数据,比如mysql

3、web界面 也叫web UI,在web界面下操作配置是zabbix简单易用的主要原因

4、zabbix-proxy 可选组件,它可以代替zabbix-server的功能,减轻server的压力。有时候,服务器分布在多个机房里,每个机房的服务器之间都是一个单独的内网,这时候就可以在某一个局域网里搭建一个 zabbix-proxy ,用这台 proxy 去监控局域网里的机器

5、zabbix-agent 客户端软件,负责采集各个监控服务或项目的数据,并上报

zabbix监控流程图

linux 系统监控库 linux系统监控平台_mysql

 

19.3/19.4/19.6 安装zabbix

准备工作

准备两台机器,一台作为服务端(监控中心),另外一台作为它的客户端。

下载zabbix的rpm包

zabbix可以直接yum安装,但需要安装epel扩展源,在epel扩展源里面安装的zabbix的版本,最高是2.2版本,比较旧,所以使用官方提供的repo源,实验中使用的zabbix3.2版本

首先访问官方下载地址,选择对应的版本,并提供对应的发行版,下图所示,复制该链接

linux 系统监控库 linux系统监控平台_php_02

linux 系统监控库 linux系统监控平台_mysql_03

两台机器均需要下载

wget https://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm

安装rpm包

实际上安装rpm包相当于安装了一个yum源仓库

rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm

查看/etc/yum.repos.d/目录下面会看到增加了一个zabbix.repo

[root@linux-5 ~]# ls /etc/yum.repos.d/
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo  epel-testing.repo
CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo  epel.repo          zabbix.repo

安装zabbix

服务端与客户端安装的内容不同,在服务端是需要安装这些所有的包,而在客户端仅仅需要安装 zabbix-agent 包即可

服务端
yum install -y zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql

客户端
yum install -y zabbix-agent

zabbix-agent  客户端软件;

zabbix-get  服务端用的一个工具,这个工具可以通过命令行的形式获得客户端某些监控项目的数据;

zabbix-server-mysql  这个是服务端跟mysql打交道相关的组件;

zabbix-web  webUI ,web界面;

zabbix-web-mysql  web和mysql相关组件;

zabbix 是基于php环境的,也就是说用的是php 的代码编写的web界面,也就说这个zabbix 相当于一个站点;

安装mysql,如果mysql之前没有安装的话,可根据lamp那一章的mysql安装方法安装mysql

服务端配置

修改MySQL配置文件
vim /etc/my.cnf
在[mysqld]下增加字符集
character_set_server = utf8

如果不设置字符集,那么zabbix的web界面,设置成中文的话,可能就会出现乱码

修改完mysql的配置文件后,重启mysql服务

/etc/init.d/mysqld restart

创建zabbix库
create database zabbix character set utf8; //创建库同时指定字符集为utf-8

创建用户
grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by '123456';

这个用户是需要让web(php)代码连接mysql的,监控中心zabbix mysql服务,启动的前提就是要连接mysql;客户端采集了数据,需要把这些数据传递给服务端,那么服务端怎么把这些数据写入到MySQL去,这时就涉及到了mysql 的用户,涉及到了mysql 的数据库;用哪一个用户,去写入那一个库。

导入原始数据

退出mysql的命令行后,导入原始的数据,若缺少这些数据,zabbix就没有办法工作,就没有办法在web界面下展现给我们

[root@linux-5 ~]# cd /usr/share/doc/zabbix-server-mysql-3.2.11/
[root@linux-5 zabbix-server-mysql-3.2.11]#

在/usr/share/doc/zabbix-server-mysql-3.2.11/目录下有一个create.sql.gz压缩包,将它解压,解压之后生成一个.sql的文件

[root@linux-5 zabbix-server-mysql-3.2.11]# ls
AUTHORS  ChangeLog  COPYING  create.sql.gz  NEWS  README
[root@linux-5 zabbix-server-mysql-3.2.11]# gzip -d create.sql.gz 
[root@linux-5 zabbix-server-mysql-3.2.11]# ls
AUTHORS  ChangeLog  COPYING  create.sql  NEWS  README

将create.sql文件,导入到zabbix库里面去

[root@linux-5 zabbix-server-mysql-3.2.11]# mysql -uroot zabbix < create.sql

启动zabbix服务
systemctl start zabbix-server

启动httpd服务

在启动http服务之前,先查看nginx服务是否启动,若启动了nginx,就监听了80端口,就需要去停掉nginx服务,再去启动httpd服务

[root@linux-5 zabbix-server-mysql-3.2.11]# ps aux|grep nginx
root       3276  0.0  0.1 120752  2096 ?        Ss   17:21   0:00 nginx: master process /usr/sbin/nginx
nginx      3277  0.0  0.1 121136  3584 ?        S    17:21   0:00 nginx: worker process
root       4811  0.0  0.0 112676   984 pts/0    R+   23:50   0:00 grep --color=auto nginx
[root@linux-5 zabbix-server-mysql-3.2.11]# systemctl stop nginx
[root@linux-5 zabbix-server-mysql-3.2.11]# ps aux|grep nginx
root       4822  0.0  0.0 112676   984 pts/0    R+   23:50   0:00 grep --color=auto nginx
[root@linux-5 zabbix-server-mysql-3.2.11]# systemctl start httpd
[root@linux-5 zabbix-server-mysql-3.2.11]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp6       0      0 :::80                   :::*                    LISTEN      4829/httpd

若需要开机启动httpd服务和zabbix服务,则需要将它加入到服务的列表中去,同时需要取消开机启动Nginx服务

[root@linux-5 zabbix-server-mysql-3.2.11]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@linux-5 zabbix-server-mysql-3.2.11]# systemctl enable zabbix-server
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-server.service to /usr/lib/systemd/system/zabbix-server.service.
[root@linux-5 zabbix-server-mysql-3.2.11]# systemctl disable nginx
[root@linux-5 zabbix-server-mysql-3.2.11]# chkconfig nginx off
注意:正在将请求转发到“systemctl disable nginx.service”。

检查zabbix服务的进程与监听端口
[root@linux-5 zabbix-server-mysql-3.2.11]# ps aux|grep zabbix
zabbix     4802  0.0  0.1 254588  3488 ?        S    7月09   0:00 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
root       4965  0.0  0.0 112676   984 pts/0    R+   00:00   0:00 grep --color=auto zabbix
[root@linux-5 zabbix-server-mysql-3.2.11]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      564/rpcbind         
tcp        0      0 0.0.0.0:20048           0.0.0.0:*               LISTEN      857/rpc.mountd      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      811/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1226/master         
tcp        0      0 0.0.0.0:33914           0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:2049            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:54120           0.0.0.0:*               LISTEN      821/rpc.statd       
tcp6       0      0 :::111                  :::*                    LISTEN      564/rpcbind         
tcp6       0      0 :::80                   :::*                    LISTEN      4829/httpd          
tcp6       0      0 :::20048                :::*                    LISTEN      857/rpc.mountd      
tcp6       0      0 :::22                   :::*                    LISTEN      811/sshd            
tcp6       0      0 :::40951                :::*                    LISTEN      821/rpc.statd       
tcp6       0      0 ::1:25                  :::*                    LISTEN      1226/master         
tcp6       0      0 :::44352                :::*                    LISTEN      -                   
tcp6       0      0 :::2049                 :::*                    LISTEN      -                   
tcp6       0      0 :::3306                 :::*                    LISTEN      4700/mysqld

通过检查结果可以发现,虽然服务启动了,但并没有zabbix监听的端口,因此需要查看错误日志排查问题所在

[root@linux-5 zabbix-server-mysql-3.2.11]# tail /var/log/zabbix/zabbix_server.log

  4802:20180710:000249.473 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
  4802:20180710:000249.476 database is down: reconnecting in 10 seconds
  4802:20180710:000259.479 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
  4802:20180710:000259.479 database is down: reconnecting in 10 seconds
  4802:20180710:000309.480 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
  4802:20180710:000309.480 database is down: reconnecting in 10 seconds
  4802:20180710:000319.480 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
  4802:20180710:000319.480 database is down: reconnecting in 10 seconds
  4802:20180710:000329.483 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
  4802:20180710:000329.483 database is down: reconnecting in 10 seconds

虽然zabbix服务有进程,但没有彻底的起来,说明不能够连接mysql,所以还需要更改zabbix的配置文件。

修改zabbix配置文件
vim /etc/zabbix/zabbix_server.conf

搜索/DBHost
在DBName=zabbix上面增加
DBHost=127.0.0.1

在DBuser下面增加
DBPassword=123456

因为mysql和zabbix装在同一台机器上,这里的 DBHost可以写localhost 或者127.0.0.1;如果是在生产环境上,有时候为了提升zabbix的性能,可能会把MySQL装在其他机器上,这时的DBHost,就需要写mysql的ip,创建的用户的来源IP也需要写mysql的ip

重启zabbix服务
systemctl restart zabbix-server.service

重启后重新查看服务和进程
[root@linux-5 zabbix-server-mysql-3.2.11]# ps aux|grep zabbix
zabbix     5089  0.1  0.2 254768  4172 ?        S    00:19   0:00 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
zabbix     5092  0.0  0.1 254768  2516 ?        S    00:19   0:00 /usr/sbin/zabbix_server: configuration syncer [waiting 60 sec for processes]
zabbix     5093  0.0  0.1 254768  2728 ?        S    00:19   0:00 /usr/sbin/zabbix_server: db watchdog [synced alerts config in 0.028233 sec, idle 60 sec]
zabbix     5094  0.0  0.2 361712  5252 ?        S    00:19   0:00 /usr/sbin/zabbix_server: poller #1 [got 0 values in 0.000003 sec, idle 5 sec]
zabbix     5095  0.0  0.2 361712  5252 ?        S    00:19   0:00 /usr/sbin/zabbix_server: poller #2 [got 0 values in 0.000002 sec, idle 5 sec]
zabbix     5096  0.0  0.2 361712  5252 ?        S    00:19   0:00 /usr/sbin/zabbix_server: poller #3 [got 0 values in 0.000003 sec, idle 5 sec]
zabbix     5097  0.0  0.2 361712  5252 ?        S    00:19   0:00 /usr/sbin/zabbix_server: poller #4 [got 0 values in 0.000003 sec, idle 5 sec]
zabbix     5098  0.0  0.2 361712  5252 ?        S    00:19   0:00 /usr/sbin/zabbix_server: poller #5 [got 0 values in 0.000003 sec, idle 5 sec]
zabbix     5099  0.0  0.2 361712  5252 ?        S    00:19   0:00 /usr/sbin/zabbix_server: unreachable poller #1 [got 0 values in 0.000004 sec, idle 5 sec]
zabbix     5100  0.0  0.1 254768  3624 ?        S    00:19   0:00 /usr/sbin/zabbix_server: trapper #1 [processed data in 0.000000 sec, waiting for connection]
zabbix     5101  0.0  0.1 254768  3624 ?        S    00:19   0:00 /usr/sbin/zabbix_server: trapper #2 [processed data in 0.000000 sec, waiting for connection]
zabbix     5102  0.0  0.1 254768  3624 ?        S    00:19   0:00 /usr/sbin/zabbix_server: trapper #3 [processed data in 0.000000 sec, waiting for connection]
zabbix     5103  0.0  0.1 254768  3624 ?        S    00:19   0:00 /usr/sbin/zabbix_server: trapper #4 [processed data in 0.000000 sec, waiting for connection]
zabbix     5104  0.0  0.1 254768  3624 ?        S    00:19   0:00 /usr/sbin/zabbix_server: trapper #5 [processed data in 0.000000 sec, waiting for connection]
zabbix     5108  0.0  0.1 257340  2656 ?        S    00:19   0:00 /usr/sbin/zabbix_server: icmp pinger #1 [got 0 values in 0.000003 sec, idle 5 sec]
zabbix     5109  0.0  0.1 254768  2860 ?        S    00:19   0:00 /usr/sbin/zabbix_server: alerter [sent alerts: 0 success, 0 fail in 0.000335 sec, idle 30 sec]
zabbix     5111  0.0  0.1 254768  2512 ?        S    00:19   0:00 /usr/sbin/zabbix_server: housekeeper [startup idle for 30 minutes]
zabbix     5112  0.0  0.1 254844  2968 ?        S    00:19   0:00 /usr/sbin/zabbix_server: timer #1 [processed 0 triggers, 0 events in 0.000156 sec, 0 maintenances in 0.000000 sec, idle 30 sec]
zabbix     5113  0.0  0.1 254768  2872 ?        S    00:19   0:00 /usr/sbin/zabbix_server: http poller #1 [got 0 values in 0.000488 sec, idle 5 sec]
zabbix     5116  0.0  0.2 359128  5088 ?        S    00:19   0:00 /usr/sbin/zabbix_server: discoverer #1 [processed 0 rules in 0.001294 sec, idle 60 sec]
zabbix     5117  0.0  0.1 254768  2860 ?        S    00:19   0:00 /usr/sbin/zabbix_server: history syncer #1 [synced 0 items in 0.000001 sec, idle 1 sec]
zabbix     5118  0.0  0.1 254768  2860 ?        S    00:19   0:00 /usr/sbin/zabbix_server: history syncer #2 [synced 0 items in 0.000010 sec, idle 1 sec]
zabbix     5119  0.0  0.1 254768  2860 ?        S    00:19   0:00 /usr/sbin/zabbix_server: history syncer #3 [synced 0 items in 0.000001 sec, idle 1 sec]
zabbix     5120  0.0  0.1 254768  2860 ?        S    00:19   0:00 /usr/sbin/zabbix_server: history syncer #4 [synced 0 items in 0.000000 sec, idle 1 sec]
zabbix     5125  0.0  0.2 254768  3804 ?        S    00:19   0:00 /usr/sbin/zabbix_server: escalator #1 [processed 0 escalations in 0.000417 sec, idle 3 sec]
zabbix     5126  0.0  0.2 254768  3804 ?        S    00:19   0:00 /usr/sbin/zabbix_server: proxy poller #1 [exchanged data with 0 proxies in 0.000002 sec, idle 5 sec]
zabbix     5134  0.0  0.1 254768  2628 ?        S    00:19   0:00 /usr/sbin/zabbix_server: self-monitoring [processed data in 0.000004 sec, idle 1 sec]
zabbix     5135  0.0  0.1 254768  2848 ?        S    00:19   0:00 /usr/sbin/zabbix_server: task manager [processed 0 task(s) in 0.000292 sec, idle 5 sec]
root       5146  0.0  0.0 112676   984 pts/0    R+   00:20   0:00 grep --color=auto zabbix
[root@linux-5 zabbix-server-mysql-3.2.11]# netstat -lntp|grep zabbix
tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      5089/zabbix_server  
tcp6       0      0 :::10051                :::*                    LISTEN      5089/zabbix_server

检查可以发现,正常启动的zabbix有许多子进程,监听端口为10051端口

web界面配置

在浏览器输入IP地址(即监控中心的IP地址),http://192.168.88.5/zabbix/去访问

linux 系统监控库 linux系统监控平台_mysql_04

点击next

linux 系统监控库 linux系统监控平台_操作系统_05

此时安装向导提示设置PHP的时区,需要修改PHP默认配置文件

vim /etc/php.ini

搜索timezone
改为date.timezone = Asia/Shanghai

修改完成后需要重启Apache服务

systemctl restart httpd

重启后刷新web界面,发现时区已成功定义

linux 系统监控库 linux系统监控平台_网络_06

继续点击next,填写相应信息

linux 系统监控库 linux系统监控平台_linux 系统监控库_07

linux 系统监控库 linux系统监控平台_操作系统_08

最终完成安装

linux 系统监控库 linux系统监控平台_网络_09

点击finish后,会弹出zabbix监控中心后台登录界面

linux 系统监控库 linux系统监控平台_php_10

默认用户名为:Admin,默认密码:zabbix

修改密码

进入后,首先修改密码,避免泄露

linux 系统监控库 linux系统监控平台_网络_11

linux 系统监控库 linux系统监控平台_操作系统_12

linux 系统监控库 linux系统监控平台_php_13

修改完成后,刷新浏览器,发现界面已变为中文

linux 系统监控库 linux系统监控平台_网络_14

客户端配置

安装zabbix
yum install -y zabbix-agent

因为是客户端,所以只需要安装一个包

编辑zabbix的配置文件

客户端与服务端通信是通过白名单IP的形式,因此需要在客户端上配置监控中心的IP

vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.88.5         //监控中心IP
# 定义服务端的ip(被动模式)

ServerActive=192.168.88.5   //监控中心IP
#定义服务端的ip(主动模式)
#这个涉及到一个主动和被动模式;如果这里不填写服务中心的IP,那么就只能使用被动模式;这个IP是主动模式时候用的

Hostname=Zabbix server修改为Hostname=lem-02
#这是自定义的主机名,一会还需要在web界面下添加监控客户端时需要设置同样的主机名

启动zabbix服务
systemctl start zabbix-agent.service

查看进程和监听端口
[root@linux-10 ~]# ps aux|grep zabbix
zabbix     1510  0.0  0.0  80704  1280 ?        S    11:12   0:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
zabbix     1511  0.0  0.0  80704  1348 ?        S    11:12   0:00 /usr/sbin/zabbix_agentd: collector [idle 1 sec]
zabbix     1512  0.0  0.0  80704  1844 ?        S    11:12   0:00 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
zabbix     1513  0.0  0.0  80704  1844 ?        S    11:12   0:00 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
zabbix     1514  0.0  0.0  80704  1844 ?        S    11:12   0:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
zabbix     1515  0.0  0.1  80836  2204 ?        S    11:12   0:00 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
root       1523  0.0  0.0 112720   968 pts/0    R+   11:15   0:00 grep --color=auto zabbix

[root@linux-10 ~]# netstat -lntp|grep zabbix
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      1510/zabbix_agentd  
tcp6       0      0 :::10050                :::*                    LISTEN      1510/zabbix_agentd

从检查结果可以发现zabbix服务端监听的是10051端口,客户端监听的端口是10050

19.5 忘记Admin密码如何做

重置zabbix密码,就是直接更改数据库里的数据即可

进入mysql
[root@linux-5 ~]# mysql -uroot

使用zabbix库
mysql> use zabbix
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

查看相关的表
show tables;

以后服务器监控的主机越多,那么这些表会越来越大,所以需要去指定合适的监控策略。例如:数据量需要保存多长时间,那么在定义这个监控项目的时候就该想到,要保留1个月还是1年,还是其他时间;或者,监控的站点服务量很大的话,一天就要涨好几个G,那么你的服务器磁盘能支持保存多长时间。

zabbix用户的密码,默认存放的表是users里面

查看users表
desc users;

需要修改的是passwd表

修改密码
update users set passwd=md5(‘123456’) where alias=‘Admin’;

修改后就可以使用新密码登录zabbix了。