目录

一、监控简介

1、重要性

2、常见监控平台

Cacti

Nagios

Zabbix

二、Cacti 监控服务器

1、组件构成

SNMP

RRDtool

工作架构

2、Cacti 监控组件安装配置

三、Nagios 监控服务器

1、相关原理

老牌监控服务器 Cacti – Nagios 对比

健康对象类划分

收集数据架构图

整体框架图

2、构建 Nagios 监控

四、Zabbix 监控服务器

1、Zabbix 介绍

Zabbix 是什么?

Zabbix 工作架构

Zabbix 进程构成

Zabbix 硬件需求

2、构建 Zabbix 监控服务器

3、Zabbix 监控 Nginx 并发(自定义监控项、模板)

4、Zabbix 联合钉钉实现终端报警

一、监控简介

1、重要性

宕机损失案例:美国呼叫中心 24000 美金/小时

阿里/百度:在这里插入图片描述

2、常见监控平台

① Cacti

**软件设计目标:**流量与性能监测为主 ------- http://www.cacti.net/

**数据展示平台:**B/S

**数据收集方式:**SNMP(Simple Network Management Protocol)

在这里插入图片描述

② Nagios

**软件设计目标:**服务与性能监测为主 ------- http://www.nagios.org/

**数据展示平台:**B/S

**数据收集方式:**C/S(预定义/自定义脚本)
在这里插入图片描述

③ Zabbix

**软件设计目标:**全功能监控软件 ------- http://www.zabbix.com/
**数据展示平台:**B/S

**数据收集方式:**C/S(官方客户端)

在这里插入图片描述

二、Cacti 监控服务器

1、组件构成

**组合框架:**LAP

**数据收集:**SNMP

**绘制图形:**RRDtool
在这里插入图片描述

SNMP

收集数据展示图
在这里插入图片描述

RRDtool

**官方定义:**RRDtool是开源行业标准,高性能的时间序列数据记录和绘图系统。RRDtool可以很容易地集成到shell脚本、perl、python、ruby、lua或tcl应用程序中

工作架构

**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,设置数据库连接

-1、部署源码包,并安装补丁文件

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.patch # 为 Cacti 代码进行补丁更新

patch -p1 -N <~/graph_list_view.patch

patch -p1 -N <~/html_output.patch

patch -p1 -N <~/ldap_group_authenication.patch

patch -p1 -N <~/script_server_command_line_parse.patch

patch -p1 -N <~/ping.patch

patch -p1 -N <~/poller_interval.patch

-2、添加检测数据的用户账户,更改权限,保证读写数据正常

useradd runct # 添加 runct 用户,用于 RRDTOOL 运行

chown -R root.root ./

chown -R runct.runct rra/ log/

-3、授权数据库用户,导入初始化数据

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 数据库还原

-4、修改 cacti 配置文件

vim include/config.php # 配置 cacti 页面连接数据库的认证信息

mysql

cactidb

localhost

cactiuser

pwd@123

3306

-5、调整 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

4)安装

http://192.168.216.16/install# 进行安装

5)客户端配置

yum -y install net-snmp net-snmp-utils lm_sensors # 安装 SNMP、主板信息监控所需软件包

vim /etc/snmp/snmpd.conf

41 服务器地址 默认为 default 共同体名称 默认为 public

62 开放所有的 SNMP 查询权限 all 默认为 SystemView

85 支持各种查询与访问 取消注释符号

6)收集数据

su - runct

php /var/www/html/cacti/poller.php # 生成对应的监控图表

crontab -e

*/5 * * * * /usr/bin/php /var/www/html/cacti/poller.php &>/dev/null # 配置 RRDTOOL

的轮训任务

exit

service crond start

三、Nagios 监控服务器

1、相关原理

① 老牌监控服务器 Cacti – Nagios 对比

Cacti

  • 收集数据、图形展示
  • 偏重网络流量
  • SNMP、OID、SNMP Agent

Nagios

  • 偏重主机、服务的状态
  • Agent
  • 脚本

② Nagios 健康对象类划分

主机、主机组 服务/资源,服务组

联系人,联系人组 时段

命令

③ Nagios 收集数据架构图

在这里插入图片描述

④ Nagios 整体框架图

在这里插入图片描述

2、构建 Nagios 监控

1)解决安装Nagios的依赖关系: # 需要注意 *gb* 必须按照视屏的方式进行后安装

# yum -y install httpd gcc glibc glibc-common *gd* php php-mysql

2)创建运行身份

# groupadd nagcmd # 创建运行组

# useradd -m nagios # 创建运行用户 nagios

# usermod -a -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=nagcmd --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_hosts=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 $ARG1$

}

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_nrpe!check_load

}

define service{

use generic-service

host_name mylinux

service_description check-users

check_command check_nrpe!check_users

}

define service{

use generic-service

host_name mylinux

service_description otal_procs

check_command check_nrpe!check_total_procs

}

四、Zabbix 监控服务器

1、Zabbix 介绍

① Zabbix 是什么?

zabbix 是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案 ( 基于 GPL V2 )

zabbix由 2 部分构成,zabbix server与可选组件zabbix agent

② Zabbix 工作架构

在这里插入图片描述

③ Zabbix 进程构成

**zabbix 安装完成后会产生 5 个程序:**zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_sender、zabbix_server,zabbix_java_gateway是可选,这个需要另外安装

**1)zabbix_agentd:**客户端守护进程,此进程收集客户端数据,例如 cpu负载、内存、硬盘使用情况等

**2)zabbix_get:**zabbix 工具,单独使用的命令,通常用于排错

**3)zabbix_sender:**zabbix工具,用于发送数据给 server 或者 proxy ,在脚本完成之后使用 sender 主动将数据提交

**4)zabbix_server:**zabbix 服务端守护进程,所有的数据都是被提交或主动提交到 zabbix_server 端

5)zabbix_proxy:zabbix代理守护进程。功能类似server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交/被提交到server里

**6)zabbix_java_gateway:**zabbix2.0之后引入的一个功能。顾名思义:Java网关,类似agentd,但是只用于Java方面。需要特别注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到server或者proxy

④ Zabbix 硬件需求

在这里插入图片描述

2、构建 Zabbix 监控服务器

1)初始化系统设置

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

sed -i “s/SELINUX=enforcing/SELINUX=disabled/g” /etc/selinux/config

二)安装 LAMP 环境

wget http://mirrors.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 > 拷贝微软雅黑字体改名为 msyh.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_agentd.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

3、Zabbix 监控 Nginx 并发(自定义监控项、模板)

1)源码编译安装 Nginx 服务器并开启状态统计模块

2)Zabbix 客户端配置

-1、编写 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

.-2、将自定义的UserParameter加入配置文件,然后重启agentd

#cat /usr/local/zabbix-3.0.0/etc/zabbix_agentd.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

-3、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

4、Zabbix 联合钉钉实现终端报警

1)监控方式添加参数

{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

2)错误报警信息参数

标题改为:
故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!

信息改为:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件 ID:{EVENT.ID}

3)错误恢复报警信息设置

标题改为:
恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!

信息改为:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件 ID:{EVENT.ID}
ix_get -s 10.10.1.121 -k ‘nginx.status[ping]’

1

4、Zabbix 联合钉钉实现终端报警

1)监控方式添加参数

{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

2)错误报警信息参数

标题改为:
故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!

信息改为:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件 ID:{EVENT.ID}

3)错误恢复报警信息设置

标题改为:
恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!

信息改为:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件 ID:{EVENT.ID}

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐