任务背景

公司的服务器里经常会有CPU很繁忙, 内存不够, 磁盘空间快满了, 网络很卡, 客户端连接不上等各种问题。我们运维工程师不能总是盯着服务器去查看,那样的话就太繁琐了, 而且很可能发现问题不及时。所以我们需要建立一套完善的监控系统,将所有需要监控的服务器及其各种需要的状态数据都实时地收集, 并图形化的展示,并可以进行报警, 让机器主动及时地与人沟通。

认识监控

为什么要监控?

实时收集数据,通过报警及时发现问题,及时处理。为优化提供数据依据。

linux系统中的监控主要监控什么

任何你所想要监控的数据,如cpu负载,cpu的idle时间,内存使用量,内存利用率,io,network等等。

主流的开源监控平台介绍

zabbix

环境准备

zabbix监控_zabbix告警

1、静态ip

2、主机名


hostnamectl set-hostname --static zabbixserver
IP
vim /etc/hosts
192.168.192.145 zabbixserver
192.168.192.146 agent1
192.168.192.144 agent2

3、时间同步

systemctl restart ntpd
systemctl enable ntpd

date -s "20220517 17:05:05"

4、关闭防火墙,selinux

5、配置yum(安装完centos后默认的yum源+下面zabbix源)

(zabbix)zabbix
vim /etc/yum.repos.d/zabbix.repo

[zabbix]
name=zabbix
baseurl=https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/3.4/rhel/7/x86_64/
enabled=1
gpgcheck=0
[zabbix_deps]
name=zabbix_deps
baseurl=https://mirrors.tuna.tsinghua.edu.cn/zabbix/non-supported/rhel/7/x86_64/
enabled=1
gpgcheck=0


[root@zabbixserver ~]# ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo zabbix.repo
CentOS-CR.repo CentOS-Media.repo CentOS-x86_64-kernel.repo
CentOS-Debuginfo.repo CentOS-Sources.repo epel.repo



yum
1yum
()
2rpm
[root@zabbixserver ~]# reposync --repoid=zabbix_deps
yumrpm
[root@zabbixserver ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg zabbix_deps
[root@zabbixserver ~]# ls zabbix_deps/
fping-3.10-1.el7.x86_64.rpm iksemel-devel-1.4-2.el7.centos.x86_64.rpm
fping-3.16-1.el7.x86_64.rpm iksemel-utils-1.4-2.el7.centos.x86_64.rpm
iksemel-1.4-2.el7.centos.x86_64.rpm
3repodata
[root@zabbixserver ~]# createrepo zabbix_deps/
[root@zabbixserver ~]# ls zabbix_deps/
fping-3.10-1.el7.x86_64.rpm iksemel-devel-1.4-2.el7.centos.x86_64.rpm
fping-3.16-1.el7.x86_64.rpm iksemel-utils-1.4-2.el7.centos.x86_64.rpm
iksemel-1.4-2.el7.centos.x86_64.rpm repodata

zabbix服务器安装

zabbix监控_监控项_02

1、安装zabbix和mariadb数据库

[root@zabbixserver ~]# yum install -y zabbix-server-mysql zabbix-web-mysql mariadb-server

2、 在mysql(mariadb)里建立存放数据的库并授权,然后导入zabbix所需要用的表和数据

[root@zabbixserver ~]# systemctl restart mariadb.service 
[root@zabbixserver ~]# systemctl enable mariadb.service

[root@zabbixserver ~]# mysql
MariaDB [(none)]> create database zabbix default charset utf8; utf8zabbix()
MariaDB [(none)]> grant all on zabbix.* to zabbix@'localhost' identified by '123';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit

3、导入表数据

,(yum),3.4.15
[root@zabbixserver ~]# zcat /usr/share/doc/zabbix-server-mysql-3.4.15/create.sql.gz |mysql zabbix



[root@zabbixserver ~]# mysql
MariaDB [(none)]> use zabbix;
MariaDB [zabbix]> show tables;
...
140 rows in set (0.00 sec)

MariaDB [zabbix]> quit

4、配置zabbix主配置文件,并启动服务,确认端口

找到并确认如下参数(默认值正确的不用打开注释,默认值不对的,要修改正确并打开注释)

DBPasswordDBSocket
[root@zabbixserver ~]# vim /etc/zabbix/zabbix_server.conf
12 # ListenPort=10051
91 # DBHost=localhost
100 DBName=zabbix
116 DBUser=zabbix
124 DBPassword=123 --2
131 DBSocket=/var/lib/mysql/mysql.sock --socket
345 # ListenIP=0.0.0.0

[root@zabbixserver ~]# systemctl restart zabbix-server
[root@zabbixserver ~]# systemctl enable zabbix-server

[root@zabbixserver ~]# lsof -i:10051

5、 配置zabbix的httpd子配置文件,并启动httpd

20
[root@zabbixserver ~]# vim /etc/httpd/conf.d/zabbix.conf

20 php_value date.timezone Asia/Shanghai

[root@zabbixserver ~]# systemctl restart httpd
[root@zabbixserver ~]# systemctl enable httpd

6、使用浏览器访问 http://192.168.192.145/zabbix,并按提示进行安装


1welcome
2Check of pre-requisites
3Configure DB connection
zabbix,123
4Zabbix server details
namezabbixIP
5Pre-Installation summary
6install


:admin
:zabbix

zabbix监控_zabbix监控_03

zabbix监控_zabbix告警_04

zabbix监控_zabbix告警_05

zabbix监控_zabbix故障诊断_06

zabbix监控_zabbix告警_07

7、右上角点一个类似小人的图标 ——>语言选 chinese zh-CN ——>点 update后换成中文界面

zabbix监控_触发器_08

通过zabbix-agent监控本机

1、在server上安装zabbix-agent

[root@zabbixserver ~]# yum install -y zabbix-agent

2、启动zabbix-agent服务

[root@zabbixserver ~]# vim /etc/zabbix/zabbix_agentd.conf 

Server=127.0.0.1 --zabbixIP
ListenPort=10050 --

[root@zabbixserver ~]# systemctl restart zabbix-agent
[root@zabbixserver ~]# systemctl enable zabbix-agent

[root@zabbixserver ~]# lsof -i:10050

3、回到web管理界面——>点配置——>点主机——>默认看到叫Zabbix server的本机,但状态是停用的——>点击并启用

zabbix监控_触发器_09

4、点zabbix server里的图形——>任意选一张图后点预览——>看到图上有乱码

zabbix监控_zabbix告警_10

5,、解决乱码方法: 换一个字体

ttf-arphic-ukai.tar.gz,
[root@zabbixserver ~]# tar xf ttf-arphic-ukai.tar.gz -C /usr/share/zabbix/fonts/
[root@zabbixserver ~]# mv /usr/share/zabbix/fonts/ukai.ttc /usr/share/zabbix/fonts/ukai.ttf
[root@zabbixserver ~]# vim /usr/share/zabbix/include/defines.inc.php

54 define('ZBX_GRAPH_FONT_NAME', 'ukai'); --graphfontukai

6、 做完后,不用重启服务,回到zabbix的web界面刷新查看图形就会发现没有乱码了

zabbix监控_监控项_11

通过zabbix-agent监控远程机器

1、在agent1上安装zabbix-agent包

[root@agent1 ~]# yum install -y zabbix-agent

2、配置zabbix-agent端的配置文件,启动服务并做成开机自动启动

[root@agent1 ~]# vim /etc/zabbix/zabbix_agentd.conf

97 Server=192.168.192.145 zabbixIP

[root@agent1 ~]# systemctl restart zabbix-agent
[root@agent1 ~]# systemctl enable zabbix-agent

[root@agent1 ~]# lsof -i:10050

3、回到web管理界面--》点配置--》点主机 --》 点创建主机

zabbix监控_zabbix监控_12

zabbix监控_触发器_13

4、为主机添加要监控的模板--》点模板--》点选择--》把 Template OS Linux 前面打勾(其它模板视随意加)--》点选择 --》点添加 --》最后点右下角的添加

zabbix监控_触发器_14

zabbix监控_zabbix故障诊断_15

zabbix监控_触发器_16

zabbix监控_zabbix监控_17

5、刷新确认

zabbix监控_监控项_18

故障诊断

ZBX
2867:20220518:124831.814 Message from 192.168.192.145 is missing header. Message ignored.

zabbix
[root@zabbixserver ~]# rpm -aq|grep zabbix-agent
zabbix-agent-3.4.15-1.el7.x86_64
[root@agent1 ~]# rpm -aq|grep zabbix
zabbix50-5.0.21-1.el7.x86_64
zabbix50-agent-5.0.21-1.el7.x86_64



1rpm -ezabbix-agent
[root@agent1 ~]# rpm -e zabbix50-agent-5.0.21-1.el7.x86_64
[root@agent1 ~]# rpm -e zabbix50-5.0.21-1.el7.x86_64
2rpm
http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-agent-3.4.15-1.el7.x86_64.rpm
3
4rpm -ivhrpm
[root@agent1 ~]# rpm -ivh zabbix-agent-3.4.15-1.el7.x86_64.rpm
5
[root@agent1 ~]# rpm -qa|grep zabbix
zabbix-agent-3.4.15-1.el7.x86_64
6zabbix-agent
[root@agent1 ~]# vim /etc/zabbix/zabbix_agentd.conf

97 Server=192.168.192.145 zabbixIP
7zabbix
[root@agent1 ~]# systemctl restart zabbix-agent

绿

zabbix用户与用户群组

用户(user):zabbix提供多用户管理,不同的用户可以设置不同的权限,不同的语言,不同的报警方式等。

web管理界面--》管理 --》用户

![1543039466093](图片/zabbix用户管理.png)

zabbix监控_zabbix监控_19

zabbix监控_zabbix故障诊断_20

zabbix监控_zabbix告警_21

zabbix监控_监控项_22

zabbix监控_zabbix故障诊断_23

用户群组(group): 对用户进行分组管理.

web管理界面--》管理 --》用户群组

zabbix监控_触发器_24

zabbix监控_zabbix监控_25

主机和主机群组

主机(host): 指被监控的一个设备(服务器,交换机等)

web管理界面--》管理 --》主机

zabbix监控_触发器_09

主机群组(hostgroup): 指被监控的一组主机(主要应用在有特别多主机的情况,方便分组区分)

web管理界面--》管理 --》主机群组

zabbix监控_zabbix告警_27

zabbix监控_触发器_28

监控项与应用集(重点)

监控项: 是从主机收集的数据信息,代表收集数据或监控的一个最小单位。

应用集: 代表多个监控项合成的组。

创建监控项

web管理界面--》配置--》主机--》监控项(这里我选的agent1的主机的监控项;也就是说每个主机都是各自的监控项,选谁的就是配置谁的)--》右上角点创建监控项

zabbix监控_zabbix告警_29

zabbix监控_zabbix告警_30

上面创建的agent.hostname默认就在Template OS Linux模板里,也就是说已经被使用了,就不允许你创建了。

注意: 监控项的键值写法是难点,如果不知道应该怎么传参数,可以参考模板里已经有的监控项。

练习: 把agent1已经链接的模板取消(因为cpu负载的监控项在Template OS Linux模板里已经存在了),然后参考下图为agent1创建以下几个监控项

  1. cpu负载(1分钟)
  2. cpu负载(5分钟)
  3. cpu负载(15分钟)

zabbix监控_zabbix故障诊断_31

答案:

zabbix监控_zabbix监控_32

按下图所示创建三个监控项

zabbix监控_zabbix故障诊断_33

zabbix监控_监控项_34

zabbix监控_触发器_35

zabbix监控_zabbix监控_36

监控项创建好了之后,如何查看呢?

为监控项创建图形

web管理界面--》配置--》主机--》图形(选agent1主机的图形)--》右上角点创建图形--》选择图形名称,并在下面添加刚才定义好的监控项--》添加后,预览图形

zabbix监控_触发器_37

过一段时间后的图形效果如下:

zabbix监控_zabbix监控_38

自定义监控项

自带的键值用得还是不习惯,或者有些想监控的却没有相关的键值,我们还可以自定义键值。

下面我们就来创建一个自定义的监控项:

监控agent1上的用户登录数(默认有一个键值叫system.users.num可以实现监控登录用户数,但我这里实验使用的是自己定义的键值)

1、在被监控端agent1上,随意多打开几个终端,模拟多个登录用户

[root@agent1 ~]# who|wc -l
4 4

2、在被监控端agent1上,定义用户参数

[root@agent1 ~]# vim /etc/zabbix/zabbix_agentd.conf 

295 UserParameter=loginusers,who|wc -l

:
loginusers),who|wc -l

[root@agent1 ~]# systemctl restart zabbix-agent

3、在zabbix server服务器上先测试是否能得到被监控端agent1的结果

zabbixyumzabbix-get
[root@zabbixserver ~]# yum install -y zabbix-get

使ok
[root@zabbixserver ~]# zabbix_get -s 192.168.192.146 -k loginusers
4 --agent1

4、web管理界面--》配置--》主机--》监控项(选agent1的监控项)--》右上角点创建监控项

zabbix监控_zabbix监控_39

5、 点添加后确认是否添加成功

zabbix监控_zabbix告警_40

为自定义监控项创建图形

6、web管理界面--》配置--》主机--》图形(还是选的agent1的主机的图形)--》右上角点创建图形--》选择图形名称,并在下面添加刚才定义好的监控项--》添加后,预览图形

zabbix监控_触发器_41

增加一个终端

zabbix监控_zabbix故障诊断_42

聚合图形

在上面监控项的配置里,我们定义了图形。而聚合图形就是把多个重要常用的数据整合一起来显示,方便查看.

假设我觉得agent1上cpu负载和远程linux登录用户数这2个图形非常重要,经常要查看,我现在想把它们聚合到一起。

zabbix监控_zabbix告警_43

zabbix监控_zabbix故障诊断_44

点 agent1重要图 - -》点右上角编辑聚合图形 - -》点更改

zabbix监控_zabbix告警_45

zabbix监控_触发器_46

另一张图同理,最终效果如下:

zabbix监控_zabbix告警_47

添加到常用后,就可以在监测中 --》仪表板中看到这个图了

zabbix监控_zabbix故障诊断_48

触发器(重点)

触发器(trigger): 定义监控项到达一个临界值(阈值)或者满足一个条件,就会发现状态变化(OK变为Problem,Problem变为OK)

下面我把监控agent1的登录用户数做一个触发器(大于10个登录用户就警告)

1, web管理界面--》配置--》主机--》触发器(选远程agent1的触发器)--》右上角点创建触发器

zabbix监控_监控项_49

zabbix监控_监控项_50

zabbix监控_zabbix告警_51

2、创建完触发器后,可以尝试去agent1上再多开几个终端,让其登录用户数超过10个,然后就可以去下面两图显示的地方去查看确认效果了。

zabbix监控_监控项_52

zabbix监控_zabbix监控_53

zabbix监控_监控项_54

当退出终端后,会显示问题已解决

zabbix监控_zabbix告警_55

拓展:监控nginx

nginx有一个状态页,通过查看状态页信息可以连接到nginx服务负载情况.

下面我们假设监控agent1的nginx

1、在agent1上安装nginx

[root@agent1 ~]# yum install -y epel-release
[root@agent1 ~]# yum install -y nginx

2、在nginx里的server{}配置段里加上下面一段,然后重启服务

[root@agent1 ~]# vim /etc/nginx/nginx.conf

location /status {
stub_status on;
allow 192.168.192.145; # 必须要允许zabbix server访问(或zabbix_proxy)
allow 127.0.0.1; # 允许本机访问
allow 192.168.192.1; # 加这个IP是为了windows宿主机访问用的
deny all;
access_log off;
}

[root@agent1 ~]# systemctl restart nginx
[root@agent1 ~]# systemctl enable nginx

3、 通过浏览器访问http://192.168.192.146/status就能看到如下nginx状态信息

Active connections: 1 
server accepts handled requests
1 1 1
Reading: 0 Writing: 1 Waiting: 0



Active connections
accepts
handled
requests

Reading:
Writing:
Waiting :

4、在agent1上准备一个脚本,并给可执行权限

[root@agent1 ~]# vim /opt/nginx_status.sh

#!/bin/bash

HOST="127.0.0.1"
PORT="80"

function ping { # 这个不是ping,是判断nginx进程是否存在
/sbin/pidof nginx|wc -l
}

function active {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
function accepts {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
function handled {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
function requests {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
}
function reading {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
function writing {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
function waiting {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
$1

[root@agent1 ~]# chmod 755 /opt/nginx_status.sh

5、 在agent1上定义UserParameter,并重启服务


[root@agent1 ~]# vim /etc/zabbix/zabbix_agentd.conf
UserParameter=nginx_status[*],/opt/nginx_status.sh $1

[root@agent1 ~]# systemctl restart zabbix-agent

6、在zabbix_server上用zabbix_get测试

[root@zabbixserver ~]# zabbix_get -s 192.168.192.146 -k nginx_status[ping]
1
[root@zabbixserver ~]# zabbix_get -s 192.168.192.146 -k nginx_status[handled]
2

7、测试能成功监控取到值,说明监控OK。

8、自定义监控项,创建图形

zabbix监控_zabbix告警_56

练习

1、自定义监控agent1所有进程数量,并设定触发器(当大于200就警告,当大于300就严重警告,超过400个就灾难)

UserParameter=total_proc,ps -ef|wc -l

2、自定义监控agent1上mariadb的当前登录用户数, 并设定触发器(当大于50个就警告,当大于100就严重警告,超过150个就灾难)

方法一:

[root@agent1 ~]# yum install mariadb-server -y
[root@agent1 ~]# systemctl restart mariadb
UserParameter
[root@agent1 ~]# mysqladmin extended-status|grep Threads_connected|awk '{print $4}'

UserParameter=mariadb_loginusers,mysqladmin extended-status|grep Threads_connected|awk '{print $4}'

方法二:

agentmysql
[root@agent1 ~]# /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf

mysql.status[]OK,:

mariadb
[root@zabbixserver ~]# zabbix_get -s 192.168.192.146 -k mysql.status[Threads_connected]
mariadb
[root@zabbixserver ~]# zabbix_get -s 192.168.192.146 -k mysql.status[uptime]

3、自定义监控agent1上的tcp连接数量, 并自定义触发器

[root@zabbixserver ~]# netstat -nt|awk 'NR>2 {print $0}'|wc -l

4、监控某分区磁盘使用率,并自定义触发器

[root@zabbixserver ~]# df -h|awk '$NF=="/" {print $5}'

5、监控可用内存,并自定义触发器

[root@zabbixserver ~]# free|awk 'NR==2 {print $NF}'

告警

zabbix的报警媒介支持email,jabber,sms(短信),微信,电话语音等。

zabbix监控_监控项_57

告警平台申请

自己配置报警比较复杂,而且邮件容易被拒或当做垃圾邮件。

有些专业的报警平台就可以帮你简单实现,如:onealeart

参考:​​http://www.onealert.com/​

先申请一个账号,绑定邮箱,手机,微信等进行登录

登录进去后,按如下图示操作

zabbix监控_zabbix监控_58

告警平台增加zabbix应用

zabbix监控_zabbix告警_59

zabbix监控_zabbix告警_60

zabbix监控_触发器_61

在zabbixserver安装告警平台agent

zabbix监控_监控项_62


[root@zabbixserver ~]# cd /usr/lib/zabbix/alertscripts
[root@zabbixserver alertscripts]# wget https://download.aiops.com/ca_agent/zabbix/ca_zabbix_release-3.0.1.tar.gz
[root@zabbixserver alertscripts]# tar xf ca_zabbix_release-2.1.0.tar.gz
[root@zabbixserver alertscripts]# cd cloudalert/bin/
[root@zabbixserver bin]# bash install.sh 2842d6d7-f7a1-fb97-254d-9be972403dd0
Zabbixhttp://192.168.192.145/zabbix
Check connection success!
Zabbixadmin
Zabbixzabbix
......
Install zabbix agent success!

验证安装

配置完onealert后,我们可以验证下它安装后到底对zabbix做了啥。

简单来说,它做了三件事:

  1. 增加了一个报警媒介类型
  2. 增加了一个用户和一个用户组用于报警
  3. 增加了一个报警动作

zabbix监控_zabbix监控_63

zabbix监控_zabbix告警_64

zabbix监控_zabbix告警_65

配置通知策略

zabbix监控_触发器_66

我们这里以前面都定义过的"agent1远程登录用户数"来测试报警,当agent1远程登录用户数大于20个就会触发器,然后报警。

(注意:请在测试前先把agent1的登录用户数调整到20个以下)

验证告警

将agent1远程登录用户数调整成大于20个,让触发器触发,也会触发报警。

zabbix监控_zabbix故障诊断_67