• 常见开源监控软件有cacti、nagios、zabbix、smokeping、open-falcon等等
• cacti、smokeping偏向于基础监控,成图非常漂亮
• cacti、nagios、zabbix服务端监控中心,需要php环境支持,其中zabbix和cacti都需要mysql作为数据存储,nagios不用存储历史数据,注重服务或者监控项的状态,zabbix会获取服务或者监控项目的数据,会把数据记录到数据库里,从而可以成图
• open-falcon为小米公司开发,开源后受到诸多大公司和运维工程师的追捧,适合大企业,滴滴、360、新浪微博、京东等大公司在使用这款监控软件,值得研究
• 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监控流程图
准备两台机器,一台作为服务端(监控中心),另外一台作为它的客户端。
zabbix可以直接yum安装,但需要安装epel扩展源,在epel扩展源里面安装的zabbix的版本,最高是2.2版本,比较旧,所以使用官方提供的repo源,实验中使用的zabbix3.2版本
首先访问官方下载地址,选择对应的版本,并提供对应的发行版,下图所示,复制该链接
两台机器均需要下载
wget https://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.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-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
vim /etc/my.cnf
在[mysqld]下增加字符集
character_set_server = utf8
如果不设置字符集,那么zabbix的web界面,设置成中文的话,可能就会出现乱码
修改完mysql的配置文件后,重启mysql服务
/etc/init.d/mysqld restart
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
systemctl start zabbix-server
在启动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”。
[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的配置文件。
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
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端口
在浏览器输入IP地址(即监控中心的IP地址),http://192.168.88.5/zabbix/去访问
点击next
此时安装向导提示设置PHP的时区,需要修改PHP默认配置文件
vim /etc/php.ini
搜索timezone
改为date.timezone = Asia/Shanghai
修改完成后需要重启Apache服务
systemctl restart httpd
重启后刷新web界面,发现时区已成功定义
继续点击next,填写相应信息
最终完成安装
点击finish后,会弹出zabbix监控中心后台登录界面
默认用户名为:Admin,默认密码:zabbix
修改密码
进入后,首先修改密码,避免泄露
修改完成后,刷新浏览器,发现界面已变为中文
yum install -y zabbix-agent
因为是客户端,所以只需要安装一个包
客户端与服务端通信是通过白名单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界面下添加监控客户端时需要设置同样的主机名
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
重置zabbix密码,就是直接更改数据库里的数据即可
[root@linux-5 ~]# mysql -uroot
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里面
desc users;
需要修改的是passwd表
update users set passwd=md5(‘123456’) where alias=‘Admin’;
修改后就可以使用新密码登录zabbix了。