监控非常重要,一个公司的服务器架构可以不够成熟,但是监控不能没有。目前,比较流行的开源监控软件有Cacti、Nagios、Zabbix、smokeping、open-falcon等。
Cacti擅长监控网络流量,Cacti、smokeping偏向基础监控,成图专业,多用于IDC机房。Cacti、Nagios以及Zabbix都是C/S架构,需要安装一个服务端,然后还需要在被监控的机器上安装客户端,三个都需要LAMP的支持;
Nagios监控一目了然,它监控某个指标不会返回具体数据,而是返回一个状态,告诉我们正常或不正常。它不需要历史数据,所以它不需要数据库支持,当某个指标不正常,它就会直接发送告警邮件或者短信。
Zabbix和Cacti都需要数据库支持,用来存储数据。Zabbix可以很方便地画图,支持查询历史数据,另外,Zabbix可以很方便地自定义监控项目,可以定制化监控某个指标。
open-falcon为小米公司开发,开源后受到诸多大公司和运维工程师的追捧,适合大企业,滴滴、360、新浪微博、京东等大公司在使用这款监控软件,值得研究。
19.1 Zabbix介绍
Zabbix不仅适合中小型企业,也适合大型企业,它是C/S结构,分为服务端(server)和客户端(client),单个服务端节点可以支持上万台客户端。在硬件和网络足够强悍的情况下,单台服务器理论上可以支持5万个客户端。
Zabbix官网,最新版本是3.4,下载地址,其中也有安装步骤的介绍。
Zabbix组件
Zabbix整个体系架构中有5个主要的组成角色。
zabbix-server
zabbix-server是整个监控体系中最核心的组件,它负责接受客户端发送的报告信息,所有配置、统计数据及操作数据都由它组织。
数据存储
存储着收集到的所有信息。
web界面
web界面即GUI,这让Zabbix更简单易用。运行web界面需要有PHP环境支持。
zabbix-proxy
zabbix-proxy为可选组件,用于监控节点非常多的分布式环境中,它可以代理zabbix-server的功能,减轻zabbix-server的压力。
zabbix-agent
zabbix-agent为部署在各客户端上的组件,用于采集各监控项目的数据,并把采集的数据传输给zabbix-proxy或zabbix-server。
Zabbix架构
Zabbix的运行流程如下图:
19.2 部署Zabbix
大致了解了Zabbix的架构和工作流程之后,我们试着搭建一套Zabbix监控系统。
在一台机器上可以安装Zabbix所有的组件,这里我拿两台机器来做实验,其中IP为192.168.33.128作为Zabbix服务端,192.168.33.129作为客户端。
zabbix-server 192.168.33.128
zabbix-agent 192.168.33.129
安装Zabbix
- 服务端安装Zabbix:
# cd /usr/local/src/
# wget https://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
# rpm -ivh zabbix-release-3.4-2.el7.noarch.rpm
# yum list |grep zabbix #列出与zabbix相关可用的包
安装Zabbix,需要安装的包有zabbix-agent、zabbix-get、zabbix-server-mysql、zabbix-web、zabbix-web-mysql。各个包的作用如下:
zabbix-agent:客户端程序
zabbix-get:服务器上命令行获取客户端检测项目的工具
zabbix-server-mysql:zabbix-server MySQL版
zabbix-web:web界面
zabbix-web-mysql:web界面MySQL相关
- yum安装上面所有包:
会连带安装httpd和PHP,如果mysql没安装,需要另外安装
# yum install -y zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql
配置Nginx
默认httpd中Zabbix的配置文件是/etc/httpd/conf.d/zabbix.conf
,该配置文件定义了Zabbix的web界面程序程序所在路径。如果是线上的机器,并且安装了nginx,我们可以让httpd监听8080端口,然后让nginx去代理httpd。
- 修改httpd.conf使httpd监听8080端口:
# vim /etc/httpd/conf/httpd.conf
Listen 80 #改为 Listen 8080
# systemctl start httpd
# netstat -lntp |grep httpd
tcp6 0 0 :::8080 :::* LISTEN 2099/httpd
# systemctl enable httpd #开机启动httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
- 然后创建nginx的虚拟主机配置文件:
# vim /usr/local/nginx/conf/vhost/zabbix.conf #写入下面内容
server
{
listen 80;
server_name 192.168.33.128; #把zabbix服务端的IP作为主机名
location /
{
proxy_pass http://192.168.33.128:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
# /usr/local/nginx/sbin/nginx -t #检查上面配置是否正确
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
# /usr/local/nginx/sbin/nginx -s reload #重载配置
配置MySQL
Zabbix需要MySQL的支持,如果机器上还没有安装MySQL,可以根据之前讲过的内容安装。
接下来就是配置MySQL。
- 编辑mysql配置文件:
# vim /etc/my.cnf #在[mysql]模块下面增加下面内容
character_set_server = utf8
[root@localhost src]# /etc/init.d/mysqld start #重启mysql服务
Starting MySQL SUCCESS!
# mysql -uroot -S /tmp/mysql.sock -p123456 #进入mysql
mysql> create database zabbix character set utf8; #创建zabbix库,字符集为UTF-8,不要忘记末尾分号
Query OK, 1 row affected (0.00 sec)
mysql> grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by 'lzxlzx'; #创建zabbix用户并授权
Query OK, 0 rows affected (0.01 sec)
mysql> quit
- 导入zabbix相关的数据:
# cd /usr/share/doc/zabbix-server-mysql-3.4.11/
# gzip -d create.sql.gz
# mysql -uroot -S /tmp/mysql.sock -p123456 zabbix < create.sql #导入mysql
Warning: Using a password on the command line interface can be insecure.
# systemctl enable httpd #开机启动httpd
- 修改zabbix-server的配置文件后启动服务:
# vim /etc/zabbix/zabbix_server.conf #增加下面内容
DBHost=127.0.0.1
DBPassword=lzxlzx
# systemctl start zabbix-server #启动zabbix-server服务
# systemctl enable zabbix-server #开机启动zabbix-server服务
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-server.service to /usr/lib/systemd/system/zabbix-server.service.
# netstat -lntp |grep zabbix #检查zabbix-server服务,