一、监控简介
- 重要性
宕机损失案例:美国呼叫中心 24000 美金/小时
阿里/百度:不可估计
- 常见监控平台
1)Cacti
软件设计目标: 流量与性能检测为主 —— http://www.cacti.net/
数据展示平台: B/S
数据收集方式: SNMP(Simple Network Management Protocol)
2)Nagios
软件设计目标: 服务与性能检测为主 —— http://www.nagios.org/
数据展示平台: B/S
数据收集方式: C/S(预定义/自定义脚本)
3)Zabbix
软件设计目标: 全功能监控软件 —— http://www.zabbix.com
数据展示平台: B/S
数据收集方式: C/S(官方客户端)
二、Cacti 监控服务器
- 组件构成
组合框架: LAP
数据收集: SNMP
绘制图形: RRDtool
1)SNMP
收集数据展示图
2)RRDtool
官方定义: RRDtool 是开源行业标准,高性能的时间序列数据记录和绘图系统。RRDtool 可以很容易地集成到 shell 脚本、perl、python、ruby、lua 或 tcl 应用程序中
3)工作架构
C/S 模式: 采集检测数据
B/S 模式: 管理检测数据
2. Cacti 监控组件安装配置
1)安装环境
yum -y install httpd mysql mysql-server mysql-devel libxml2-devel mysql-connector-odbc perl-DBD-MYSQL unixODBC php php-mysql php-pdo #安装基础环境 LAMP
service httpd start #启动 Apache
service mysqld start #启动 MySQL
yum -y install net-snmp net-snmp-utils net-snmp-libs lm_sensors #安装 SNMP、主板信息监控所需软件包
2)安装 rrdtool
tar -zxf rrdtool-1.4.5.tar.gz #源码编译安装 RRDTOOL
cd rrdtool
./configure --prefix=/usr/local
make && make install
如出错,按以下步骤解决 # 解决源码编译报错依赖
第 1 步
tar zxvf cgilib-0.5.tar.gz
cd cgilib-0.5
make
cp libcgi.a /usr/local/lib
cp cgi.h /usr/include
第 2 步
yum -y install libart_lgpl-devel pango-devel* cairo-devel*
3)部署 cacti,设置数据库连接
部署源码包,并安装补丁文件
tar -zxf cacti-0.8.7g.tar.gz #解压 Cacti 网站
mv cacti-0.8.7g/ /var/www/html/cacti #拷贝至Apache 默认路径
cd !$
patch -p1 -N <~/data_source_deactivate.path # 为 Cacti 代码进行补丁更新
patch -p1 -N <~/graph_list_view.path
patch -p1 -N <~/html_output.patch
patch -p1 -N <~/script_server_command_line_parse.patch
patch -p1 -N <~/ping.patch
patch -p1 -N <~/poller_interval.patch
添加监测数据的用户账户,更改权限,保证读写数据正常
useradd runct # 添加 runct 用户,用于 RRDTOOL 运行
chown -R root.root ./
chown -R runct.runct rra/log/
授权数据库用户,导入初始化数据
mysql -u root -p
create database cactidb default character set utf8; #创建 cactidb 数据库
grant all on cactidb.* to 'cactiuser'@'localhost' identified by 'pwd@123'; #把 cactiuser 用户赋予 cactidb库所有权限
quit
mysql -u cactiuser -p cactidb < cacti.sql #cacti 数据库还原
修改 cacti 配置文件
vim include/config.php #配置 cacti 页面连接数据库的认证信息
mysql
cactidb
localhost
cactiuser
pwd@123
3306
调整 http 配置
vim /etc/httpd/conf/httpd.conf #配置 Apache 对 cacti 的用户权限
Listen 80
DocumentRoot "/var/www/html/cacti"
<Directory "/var/www/html/cacti">
options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>
DirectoryIndex index.php index.html
AddDefaultCharset utf-8
service httpd restart
安装
http://192.168.216.16/install #进行安装
客户端配置
yum -y install net-snmp net-snmp-utils lm_sensors #安装 SNMP 、主板信息监控所需软件包
vim /etc/snmp/snmp.conf
41 服务器地址 默认为 default 共同体名称 默认为 public
62 开放所有的 SNMP 查询权限 all 默认为 SystemView
85 支持各种查询与访问 取消注释符号
收集数据
su -runct
php /var/www/html/cacti/poller.php #生成对应的监控图表
crontab -e
*/5 * * * * /usr/bin/php /var/www/htmlcacti/poller.php $>/dev/null #配置 RRDTOOL的轮询任务
exit
service crond start
三、Nagios 监控服务器
- 相关原理
1)老牌监控服务器 Cacti —— Nagios 对比
Cacti
- 收集数据、图形展示
- 偏重网络流量
- SNMP、OID、SNMP Agent
Nagios
- 偏重主机、服务的状态
- Agent
- 脚本
2) Nagios 健康对象类划分
主机、主机组 服务/资源,服务组
联系人,联系人组 时段
命令
3)Nagios 收集数据架构图
4)Nagios 整体框架图
- 构建 Nagios 监控
1)解决安装 Nagios 的依赖关系: # 需要注意 *gb*必须按照视屏的方式进行后安装
# yum -y install httpd gcc glibc glibc-common *gd* php php-mysql
2)创建运行身份
# groupadd nagcmd #创建运行组
# useradd -m nagios #创建运行用户 nagios
# usermod -s -G nagcmd nagios # 将 nagios 用户添加到 nagcmd 组
# usermod -a -G nagcmd apache # 将 apache 用户添加到 nagcmd 组
3)编译安装 nagios:
# tar zxf nagios-3.1.2.tar.gz # 解压 Nagios 源码包
# cd nagios-3.1.2
# ./configure --with-command-group --enable-event-broker #生成 Nagios Makefile 文件
# make all
# make install
# make install-init
# make install-config
# make install-commandmode
# vi /usr/local/nagios/etc/objects/contacts.cfg
email nagios@localhost #这个是默认设置
# make install-webconf
# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
# service httpd restart
4)编译、安装 nagios-plugins
# tar zxf nagios-plugins-1.4.15.tar.gz
# cd nagios-plugins-1.4.15
# ./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-mysql --enable-perl-modules
# make
# make install
5)配置并启动 Nagios
# chkconfig --add nagios
# chkconfig nagios on
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
# service nagios start
http://your_nagios_IP/nagios
配置 windos 端监控
1)被监控端安装 NSClient +±0.3.8-Win32.msi
2)安装完成后修改配置文件 NSC.ini 把需要的库都打开
3)在监控服务器上修改 nagios 配置文件 nagios.cfg
define host{
use windows-server ; Inherit default values from a template
host_name winserver ;The name we're giving to this host
alias My Windows Server ; A longer name associated with the host
address 192.168.0.191 ;你的主机IP
}
配置 linux 端监控
1)创建用户
# useradd nagios
2)为了安装 nrpe,先安装 nagios-plugins-1.4.15.tar.gz 插件
# tar zxf nagios-plugins-1.4.15.tar.gz
# cd nagios-plugins-1.4.15
# ./configure --with-nagios-user=nagios --with-nagios-group=nagios
# make all
# make install
3)安装 nrpe
# tar -zxvf nrpe-2.12.tar.gz
# cd nrpe-2.12.tar.gz
# ./configure --enable-ssl --with-ssl-lib=/usr/lib64/
# make all
# make install-plugin
# make install-daemon
# make install-daemon-config
4)配置 nrpe 信息
# vim /usr/local/nagios/etc/nrpe.cfg
# allowed_host=192.168.216.251,127.0.0.1
# /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
5)服务端安装 nrpe 插件
# cd nagios-nrpe_2.8.1
# ./configure --enable-ssl --with-ssl-lib=/usr/lib64/
# make all
# make install-plugin
6)commands.cfg 定义外部构件 nrpe
# vi /usr/local/nagios/etc/objects/commands.cfg
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARGI$
}
7)定义 mylinux.cfg
define host{
use linux-server
host_name mylinux/IP
alias mylinux
address 192.168.0.27(客户端IP 既被监控的IP)
}
define service{
use generic-service
host_name mylinux
service_description check-load
check_command check_nrp!check_load
}
define service{
use generic-service
host_name mylinux
service_description check-users
check_command check_nrp!check_users
}
define service{
use generic-service
host_name mylinux
service_description otal_procs
check_command check_nrp!check_otal_procs
}
四、Zabbix 监控服务器
- Zabbix 介绍
1)Zabbix 是什么?
zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案(基于 GPL V2)
zabbix 由 2 部分构成,zabbix server 与可选组件 zabbix agent
2)Zabbix 工作架构
3)Zabbix 进程构成
zabbix 安装完成后会产生 5 个程序: zabbix_agent、zabbix_get、zabbix_proxy、zabbix_sender、zabbix_server、zabbix_java_gateway 是可选,这个需要另外安装
zabbix_agentd: 客户端守护进程,此进程收集客户端数据,例如 cpu 负载、内存、硬盘使用情况等
zabbix_get: zabbix 工具,单独使用的命令,通常用于排错
zabbix_sender: zabbix工具,用于发送数据给 server 或者 proxy,在脚本完成之后使用 sender 主动将数据提交
zabbix_server: zabbix 服务端 守护进程,所有的数据都是被提交或主动提交到 zabbix_server 端
zabbix_proxy: zabbix 代理守护进程。功能类似 server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交/被提交到 server 里
zabbix_java_gateway: zabbix 2.0 之后引入的一个功能。顾名思义:Java网关,类似 agentd,但是只用于 Java 方面。需要特别注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到 server或者 proxy
4)Zabbix 硬件需求
- 构建 Zabbix 监控服务器
1)初始化系统设置
systemctl stop firewall
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing.SENLINUX=disabled/g' /etc/selinux/config
2)安装 LAMP 环境
wget http://mirrots.163.com/.help/CentOS7-Base-163.repo
yum clean all
yum makecache
yum -y install mariadb mariadb-server httpd php php-mysql
systemctl enable httpd
systemctl restart httpd
systemctl enable mariadb
systemctl restart mariadb
mysql_secure_installation
3)安装 Zabbix 程序
rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent
初始化数据库:
mysql -u root -p
CREATE DATABASE zabbix DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
读入数据库:
cd /usr/share/doc/zabbix-server-mysql-3.2.1
zcat create.sql.gz | mysql -uroot -p zabbix
启动 Zabbix 服务
vim /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
systemctl start zabbix-server
systemctl enable zabbix-server
编辑 zabbix 前端 php 配置
vim /etc/httpd/conf.d/zabbix.conf
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value always_populate_raw_post_data -1
php_value date.timezone Asia/Shanghai
调整时间同步
yum -y install ntpdate
ntpdate cn.pool.ntp.org
重启 Apache 服务生效
systemctl restart httpd
4)修改中文乱码问题
Win+R > fonts > 拷贝微软雅黑字体改名为 mysql.ttf > /usr/share/zabbix/fonts
vim /usr/share/zabbix/include/defines.inc.php
修改 zabbix php 页面配置,将 'graphfont' 修改为 msyh
define('ZBX_GRAPH_FONT_NAME','msyh');
5)添加客户端
vi /usr/local/zabbix/etc/zabbix_agent.configure
LogFile=/tmp/zabbix_agentd.log
Server=192.168.1.195
ServerActive=192.168.1.195
Hostname=192.168.1.195
rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/6/x86_64/zabbix-release-3.2-1.el6.noarch.rpm
- Zabbix 监控 Nginx 并发(自定义监控项、模板)
1)源码编译安装 Nginx 服务器并开启状态统计模块
2)Zabbix 客户端配置
编写 Nginx 监控脚本,在被监控端
#!/bin/bash
HOST="127.0.0.1"
PORT="80"
# 检测 nginx 进程是否存在
function ping {
/sbin/pidof nginx | wc -l
}
# 检测 nginx 性能
function active {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null | grep 'Active' | awk '{print $NF}'
}
function reading {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null | grep 'Reading' | awk '{print $2}'
}
function writing {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null | grep 'Writing' | awk '{print $4}'
}
function waiting {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null | grep 'Waiting' | awk '{print $6}'
}
function accepts {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null | awk NR==3 | awk '{print $1}'
}
function handled {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null | awk NR==3 | awk '{print $2}'
}
function requests {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null | awk NR==3 | awk '{print $3}'
}
# 执行 function
$1
将自定义的 UserParameter 加入配置文件,然后重启 agentd
# cat /usr/local/zabbix-3.0.0/etc/zabbix_agent.conf | grep nginx
UserParameter=nginx.status[*],/usr/local/zabbix-3.0.0/scripts/ngx-status.sh $1
# killall zabbix_agentd
# /usr/local/zabbix-3.0.0/sbin/zabbix_agentd
zabbix_get 获取数据
# /usr/local/zabbix-3.0.0/bin/zabbix_get -s 10.10.1.121 -k 'nginx.status[accepts]'
9570756
# /usr/local/zabbix-3.0.0/bin/zabbix_get -s 10.10.1.121 -k 'nginx.status[ping]'
1
- Zabbix 联合钉钉实现终端报警
1)监控方式添加参数
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
2)错误报警信息参数
标题改为:
故障{TRIGGER.STATUS},服务器:{HOSTNAME1} 发生:{TRIGGER.NAME}故障!
信息改为:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SERVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE1}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件 ID:{EVENT.ID}
3)错误恢复报警信息设置
标题改为:
恢复{TRIGGER.STATUS},服务器:{HOSTNAME1}:{TRIGGER.NAME}已恢复!
信息改为:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SERVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件 ID:{EVENT.ID}