监控概述
概述
监控的目的
• 报告系统运行状况
每一部分必须同时监控
内容包括吞吐量、反应时间、使用率等
• 提前发现问题
进行服务器性能调整前,知道调整什么
找出系统的瓶颈在什么地方
监控的资源类别
• 公开数据
Web、FTP、 SSH、 数据库等应用服务
TCP或UDP端口
• 私有数据
CPU、内存、磁盘、网卡流量等使用信息
用户、进程等运行信息
监控软件
系统监控命令
[root@zabbix ~]# free -m # 查看内存信息
[root@zabbix ~]# df -h # 查看磁盘挂载信息
[root@zabbix ~]# swapon -s # 查看交换分区
[root@zabbix ~]# iostat # 查看磁盘信息
[root@zabbix ~]# uptime # 查看cpu负载
[root@zabbix ~]# ifconfig # 查看网卡信息
[root@zabbix ~]# netstat -ntulap # 查看端口信息
[root@zabbix ~]# ping # 查看网络连接信息
[root@zabbix ~]# ps aux # 查看进程信息
[root@zabbix ~]# traceroute www.baidu.com # 路由测试
自动化监控系统
• Cacti
基于SNMP协议的监控软件,强大的绘图能力
• Nagios
基于Agent监控,强大的状态检查与报警机制
插件极多,自己写监控脚本潜入到Nagios非常方便
• Zabbix
基于多种监控机制,支持分布式监控
Zabbix基础
Zabbix简介
• Zabbix是一个高度集成的监控解决方案
• 可以实现企业级的开源分布式监控
• Zabbix通过C/S模式采集监控数据
• Zabbix通过B/S模式实现Web管理
Zabbix监控拓扑
Zabbix监控拓扑(续1 )
• 监控服务器
监控服务器可以通过SNIMP或Agent采集数据
数据可以写入MySQL、Oracle等数据库中
服务器使用LNMP实现web前端的管理
• 被监控主机
被监控主机需要安装Agent
常见的网络设备一般支持SNMP
部署LNMP
安装前准备
• 监控服务器
设置主机名( zabbix )
设置IP地址( 192.168.199.128 )
关闭防火墙、SELinux
[root@zabbix ~]# setenforce 0
[root@zabbix ~]# getenforce
Permissive
• 监控客户端
主机web1
关闭防火墙、SELinux
[root@web1 ~]# setenforce 0
[root@web1 ~]# getenforce
Permissive
主机web2
关闭防火墙、SELinux
[root@web1 ~]# setenforce 0
[root@web1 ~]# getenforce
Permissive
安装服务端LNMP环境
- 安装nginx及其依赖包
[root@zabbix ~]# yum -y install gcc pcre-devel openssl-devel zlib-devel
[root@zabbix ~]# yum -y install php php-mysql mariadb mariadb-devel mariadb-server
[root@zabbix ~]# yum -y install php-fpm.x86_64
[root@zabbix ~]# yum -y install php-ldap.x86_64
[root@zabbix ~]# rpm -q php
php-5.4.16-46.1.el7_7.x86_64
[root@zabbix ~]# rpm -q php-mysql
php-mysql-5.4.16-46.1.el7_7.x86_64
[root@zabbix ~]# rpm -q mariadb
mariadb-5.5.64-1.el7.x86_64
[root@zabbix ~]# rpm -q mariadb-devel
mariadb-devel-5.5.64-1.el7.x86_64
[root@zabbix ~]# rpm -q php-fpm
php-fpm-5.4.16-46.1.el7_7.x86_64
[root@zabbix ~]# wget http://nginx.org/download/nginx-1.6.3.tar.gz
[root@zabbix ~]# tar -zxvf nginx-1.6.3.tar.gz
[root@zabbix ~]# cd nginx-1.6.3/
[root@zabbix nginx-1.6.3]# ./configure --with-http_ssl_module
[root@zabbix nginx-1.6.3]# make && make install
[root@zabbix ~]# ln -s /usr/local/nginx/sbin/nginx /sbin/nginx
[root@zabbix ~]# nginx
安装服务端LNMP环境( 续1 )
- 修改nginx配置
[root@zabbix ~]# vim /usr/local/nginx/conf/nginx.conf
http { 17行
fastcgi_buffers 8 16k; # 缓存php生成的页面内容,8个16k
fastcgi_buffer_size 32k; # 缓存php生产的头部信息
fastcgi_connect_timeout 300; # 连接PHP的超时时间
fastcgi_send_timeout 300; # 发送请求的超时时间
fastcgi_read_timeout 300; # 读取请求的超时时间
......................................................
location ~ \.php$ { 75行
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
}
[root@zabbix ~]# nginx -t
[root@zabbix ~]# nginx -s reload
[root@zabbix ~]# ss -untlp | grep :80
安装服务端LNMP环境(续2 )
- 启动服务
[root@zabbix ~]# systemctl start mariadb
[root@zabbix ~]# systemctl enable mariadb
[root@zabbix ~]# ss -ntulp | grep :3306
[root@zabbix ~]# systemctl start php-fpm
[root@zabbix ~]# systemctl enable php-fpm
[root@zabbix ~]# ss -ntulp | grep :9000
- 测试页面
[root@zabbix ~]# vim /usr/local/nginx/html/test.php
<?php
$i=33;
echo $i;
?>
[root@zabbix ~]# curl http://localhost/test.php
33[root@zabbix ~]#
部署Zabbix
编译安装Zabbix服务
- 源码安装软件
[root@zabbix ~]# yum -y install libevent-devel net-snmp-devel curl-devel
[root@zabbix ~]# tar -zxvf zabbix-3.4.4.tar.gz
[root@zabbix ~]# cd zabbix-3.4.4/
[root@zabbix zabbix-3.4.4]# ./configure --enable-server --enable-proxy --enable-agent --with-mysql=/usr/bin/mysql_config --with-net-snmp --with-libcurl
***********************************************************
* Now run 'make install' *
* *
* Thank you for using Zabbix! *
* <http://www.zabbix.com> *
***********************************************************
[root@zabbix zabbix-3.4.4]# make && make install
[root@zabbix zabbix-3.4.4]# ls /usr/local/etc/zabbix*# 查看配置文件
zabbix_agentd.conf zabbix_proxy.conf zabbix_server.conf
zabbix_agentd.conf.d zabbix_proxy.conf.d zabbix_server.conf.d
[root@zabbix zabbix-3.4.4]# ls /usr/local/bin/ # 查看命令
zabbix_get zabbix_sender
初始化Zabbix
- 创建数据库与数据库账户
[root@zabbix zabbix-3.4.4]# mysql
MariaDB [(none)]> create database zabbix character set utf8;
MariaDB [(none)]> grant all on zabbix.* to zabbix@'localhost' identified by 'zabbix';
MariaDB [(none)]> use zabbix;
MariaDB [zabbix]> show tables;
Empty set (0.00 sec)
MariaDB [zabbix]> exit
Bye
[root@zabbix zabbix-3.4.4]# cd database/mysql/
[root@zabbix mysql]# pwd
/root/zabbix-3.4.4/database/mysql
[root@zabbix mysql]# ls
data.sql images.sql schema.sql
[root@zabbix mysql]# mysql -uzabbix -pzabbix zabbix < schema.sql
[root@zabbix mysql]# mysql -uzabbix -pzabbix zabbix < images.sql
[root@zabbix mysql]# mysql -uzabbix -pzabbix zabbix < data.sql
[root@zabbix mysql]# mysql -uzabbix -pzabbix zabbix
MariaDB [zabbix]> show tables;
MariaDB [zabbix]> exit
Bye
- **上线Zabbix页面 **
[root@zabbix mysql]# cd ../..
[root@zabbix zabbix-3.4.4]# ls frontends/
php
[root@zabbix zabbix-3.4.4]# cp -r frontends/php/* /usr/local/nginx/html/
[root@zabbix zabbix-3.4.4]# chmod -R 777 /usr/local/nginx/html/
[root@zabbix zabbix-3.4.4]# vim ~/.mysql_history
create database zabbix character set utf8;
grant all on zabbix.* to zabbix@'localhost' identified by 'zabbix';
修改Zabbix_server配置文件,设置数据库相关参数,启动Zabbix_server服务
Zabbix端口
初始化Zabbix ( 续1 )
- 修改配置文件,启动zabbix server服务
[root@zabbix ~]# useradd zabbix # 不创建用户无法启动服务
[root@zabbix ~]# vim /usr/local/etc/zabbix_server.conf
# 修改监控服务端配置文件
LogFile=/tmp/zabbix_server.log # 38行//日志文件
DBHost=localhost # 85行//数据库主机(本机)
DBName=zabbix # 95行//设置数据库名称
DBUser=zabbix # 111行//设置数据库账户
DBPassword=zabbix # 119行//设置数据库密码
[root@zabbix ~]# zabbix_server
[root@zabbix ~]# netstat -ntulp |grep :10051
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 19134/zabbix_server
初始化Zabbix ( 续2 )
- 修改配置文件,启动zabbix agent (被监控时使用)
[root@zabbix ~]# vim /usr/local/etc/zabbix_agentd.conf
# 修改监控客户端配置文件(这里指本机)
LogFile=/tmp/zabbix_agentd.log # 30行//设置日志文件
Server=127.0.0.1, 192.168.199.128 # 93行//主动监控服务器IP
ServerActive=127.0.0.1:10051 # 134行//监控服务器ip地址端口号
Hostname=Zabbix server # 145行//设置本机主机名
UnsafeUserParameters=1 # 280行//启用自定义key
[root@zabbix ~]# zabbix_agentd
[root@zabbix ~]# netstat -ntulp |grep :10050
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 22395/zabbix_agentd
初始化Zabbix (续3 )
- 初始化Web管理页面(浏览器访问web )
- http://192.168.199.128/index.php
- Zabbix初始化时会检查环境是否满足要求
初始化Zabbix ( 续4 )
- 根据检查的报警提示,修改系统环境
[root@zabbix ~]# vim /etc/php.ini
post_max_size = 16M # 672行 POST数据最大容量
max_execution_time = 300 # 384行 最大执行时间,秒
max_input_time = 300 # 394行 服务器接收数据的时间限制
date.timezone = Asia/Shanghai # 878行 设置时区
memory_limit = 128M # 405行
[root@zabbix ~]# yum -y install php-gd
[root@zabbix ~]# yum -y install php-bcmath php-mbstring
[root@zabbix ~]# yum -y install libevent-devel
[root@zabbix ~]# yum -y install php-xmlwriter php-xmlreader
[root@zabbix ~]# systemctl restart php-fpm
- 排错
[root@zabbix ~]# tail -f /usr/local/nginx/logs/error.log
[root@zabbix ~]# grep -v '#\|^$' /usr/local/nginx/conf/nginx.conf
[root@zabbix ~]# nginx -t
初始化Zabbix ( 续5 )
- 默认登陆账户admin ,默认密码zabbix
- 设置中文环境(推荐英文,中文小部分为乱码)
- 查看监控模板
- 一级菜单中的配置 --> 模板
- 查看已经监控的主机
- 一级菜单中的配置 --> 主机 --> 启用
- 查看监控信息
- 一级菜单中的监测中 —> 最新数据 —> 主机 --> zabbix server
被监控主机安装Zabbix
- 在web1和web2做相同操作
[root@web1 ~]# yum -y install httpd
[root@web1 ~]# echo web100 > /var/www/html/test.html
[root@web1 ~]# systemctl restart httpd
[root@web1 ~]# curl http://localhost/test.html
web100
[root@web1 ~]# useradd -s /sbin/nologin zabbix
[root@web1 ~]# yum -y install gcc pcre-devel
[root@web1 ~]# tar -zxvf zabbix-3.4.4.tar.gz
[root@web1 ~]# cd zabbix-3.4.4/
[root@web1 zabbix-3.4.4]# ./configure --enable-agent
***********************************************************
* Now run 'make install' *
* *
* Thank you for using Zabbix! *
* <http://www.zabbix.com> *
***********************************************************
[root@web1 zabbix-3.4.4]# make && make install
[root@web1 zabbix-3.4.4]# ll /usr/local/bin/
总用量 888
-rwxr-xr-x. 1 root root 409992 3月 7 15:04 zabbix_get
-rwxr-xr-x. 1 root root 494064 3月 7 15:04 zabbix_sender
[root@web1 zabbix-3.4.4]# ll /usr/local/sbin/
总用量 1408
-rwxr-xr-x. 1 root root 1440032 3月 7 15:04 zabbix_agentd
[root@web1 zabbix-3.4.4]# ll /usr/local/etc/
总用量 12
-rw-r--r--. 1 root root 10437 3月 7 15:04 zabbix_agentd.conf
drwxr-xr-x. 2 root root 6 3月 7 15:04 zabbix_agentd.conf.d
被监控主机安装Zabbix ( 续2 )
- 修改Agent配置文件并启动服务
[root@web1 ~]# vim /usr/local/etc/zabbix_agentd.conf
LogFile=/tmp/zabbix_agentd.log
# 30行 日志信息
Server=127.0.0.1, 192.168.199.128
# 93行 谁可以监控本机(被动监控)
ServerActive=192.168.199.128:10051
# 134行 谁可以监控本机(主动监控)
Hostname=web1
# 145行 被监控端自己的主机名
EnableRemoteCommands=1 # 69行
# 监控异常后是否允许服务器远程过来执行命令,如重启某个服务
UnsafeUserParameters=1
# 280行 是否允许自定义key监控
[root@web1 ~]# zabbix_agentd # 启动agent服务
[root@web1 ~]# ss -untlp | grep 10050
Zabbix监控服务
基础监控
添加监控主机
-
Host (主机)是监控的基本载体
-
Zabbix所有监控都是基于Host
-
通过Configuration --> Hosts --> Create Host创建
- 注意:设置中文环境后,中英文差异
-
一级菜单中的 配置 --> 主机 --> 创建主机
添加监控主机( 续1 )
- 根据提示输入
Host name
Visible name
Groups in groups
IP address
其他默认即可
应用监控模板
- 为主机添加关联的监控模板
在"Templates" 模板选项卡页面中
找到Link new templates, select选择合适的模板添加
这里我们选择Template OS Linux模板
查看监控数据
- 可以点击”Monitoring" --> "Latest data"
- 在过滤器中填写条件,根据群组和主机搜索即可
查看监控数据( 续1 )
- 找到需要的数据,点击后面的Graph
- 监控网站服务器 web2 (监控操作系统和网站服务状态)
自定义监控
自定义key
- 被监控端修改Agent配置文件(web1和web2)
[root@web1 ~]# sed -n '280p' /usr/local/etc/zabbix_agentd.conf
UnsafeUserParameters=1
[root@web1 ~]# grep -n 'Include' /usr/local/etc/zabbix_agentd.conf
[root@web1 ~]# sed -i '265s/^#//' /usr/local/etc/zabbix_agentd.conf
[root@web1 ~]# grep -n 'Include' /usr/local/etc/zabbix_agentd.conf
Include=/usr/local/etc/zabbix_agentd.conf.d/*.conf
# 265行 加载配置文件目录
- 创建自定义key
[root@web1 ~]# vim /usr/local/etc/zabbix_agentd.conf.d/get_sum_users.conf
UserParameter=getusers,wc -l /etc/passwd | awk '{print $1}'
# 自定义key语法格式
# UserParameter=自定义key名称,命令
自定义key ( 续1 )
- 重启Agent
[root@web1 ~]# killall -9 zabbix_agentd
[root@web1 ~]# ss -untlp | grep zabbix
[root@web1 ~]# zabbix_agentd
[root@web1 ~]# ps -C zabbix_agentd
[root@web1 ~]# ss -untlp | grep zabbix
- 测试自定义key是否生效
[root@web1 ~]# zabbix_get -s 127.0.0.1 -p 10050 -k getusers
64
[root@zabbix ~]# zabbix_get -s 192.168.199.129 -p 10050 -k getusers
64
创建监控模板
-
登录监控服务器Web管理页面
- 选择 Configuration --> Templates创建模板
创建监控模板( 续1 )
- 设置模板名称与组名称
Template name
Visible name
New group
创建应用
- 模板添加后,默认模板中没有任何应用、项目、触发器、图形等
创建监控项目
- 与创建应用一样,创建项目
Configuration --> Templates --> Items --> Create item
创建监控项目( 续1 )
- 设置项目参数
项目名称
自定义key (必须与配置文件一致)
应用集选择刚刚创建的应用(Application)
- 监控信息
[root@web1 ~]# useradd yy
[root@web1 ~]# useradd xx
[root@web1 ~]# useradd oo
Zabbix报警机制
基本概念
概念介绍
-
自定义的监控项默认不会自动报警
-
首页也不会提示错误
-
需要配置触发器与报警动作才可以自定报警
概念介绍( 续1)
触发器( trigger )
表达式,如内存不足300M ,用户超过30个等
当出发条件发生后,会导致一个触发事件
触发事件会执行某个动作
动作( action )
触发器的条件被触发后的行为
可以是发送邮件、也可以是重启某个服务等
触发器
创建触发器
-
通过Configuration --> Templates
-
选择模板点击后面的 Triggers --> Create trigger
强烈建议使用英文创建(中文翻译不敢恭维)
触发器表达式
- Expression表达式:触发异常的条件
{:.()}
{主机: key.函数(参数)} <表达式>常数
触发器表达式( 续1 )
● Expression表达式案例
{web1:system.cpu.load[all,avg1].last(O)}>5 # 0为最新数据
如果web1主机最新的CPU平均负载值大于5 , 则触发器状态Problem
{vfs.fs.size[/,free].max(5m)}<10G # 5m为最近5分钟
根分区,最近5分钟的最大容量小于10G , 则状态进入Problem
{vfs. file.cksum[/etc/passwd]diff(O)}>O # 0为最新数据
最新一次校验/etc/passwd如果与上一次有变化,则状态进入Problem
触发器表达式( 续2 )
● Expression表达式案例
大多数函数使用秒作为参数,使用#代表不同含义
avg, count, last, min and max函数支持额外的第二个参数time_ shift (时间偏移量)
这个参数允许从过去一段时间内引用数据
函数内容 | 描述 |
---|---|
sum(600) | 600秒内所有值的总和 |
sum(#5) | 最后5个值的总和 |
last(20) | 最后20秒的值 |
last(#5) | 倒数第5个值 |
avg(1h,1d) | 一天前的1小时的平均值 |
配置触发器
-
设置触发器名称,点击add添加表达式
-
填写表达式
监控项为账户数量,最近300秒账户数量大于26
- 创建触发器
[root@web1 ~]# useradd ww
[root@web1 ~]# userdel ww
设置邮件
创建Media
- 设置邮件服务器
Administration --> Media Type --> 选择Email邮件
设置邮件服务器信息
[root@zabbix ~]# ss -untlp | grep :25
# 如果没有的话
[root@zabbix ~]# yum -y install postfix
[root@zabbix ~]# systemctl status postfix
[root@zabbix ~]# grep zabbix /etc/passwd
[root@zabbix ~]# mail -s 'text' zabbix < /etc/hosts
[root@zabbix ~]# su - zabbix
[zabbix@zabbix ~]$ mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/zabbix": 1 message 1 new
>N 1 root Sat Mar 7 21:48 19/737 "text"
& exit
[root@zabbix ~]# vim /etc/hosts
127.0.0.1 zabbix
创建Media ( 续2 )
-
为账户添加Media
在Administration→Users中找到选择admin账户
创建Media ( 续3 )
- 选择Media菜单>点击Add添加报警媒介
- 在Meida Type中填写报警类型,收件人,时间等信息
创建Action
-
Action (行为)
定义当触发器被触发时,执行什么Action
通过Configuration --> Actions --> Create action创建
创建Action ( 续1 )
- 配置Action (填写名称)
- 配置导致动作的触发条件( 账户大于26 )
创建Action ( 续2 )
-
**配置动作的具体操作行为( 发送信息或执行远程命令) **
无限次数发送邮件, 60秒1次,发送给Admin用户
效果测试
- 在被监控主机创建账户
- 登录监控端Web页面,在仪表盘中查看问题
效果测试(续1)
- 在监控服务器上使用mail命令查收报警邮件