Linux-监控三剑客之Zabbix

发布时间 2023-03-23 16:53:49作者: wh459086748

Zabbix

一、Linux的常用的一些命令

项目 对应检查命令
网站/业务/api curl/wget
服务 systemctl/service/chkconfig(c6)
进程 ps/pstree/pgrep/pidstat/top/htop
CPU top/htop/vmstat/mpstat/lscpu/cpuinfo/w/uptime/sar
内存 top/free/ps/iotop(swap)/vmstat/mpstat/sar/hcache(buffer+cache)
磁盘 iotop/iostat/sar #磁盘测试命令 dd,fio
网络 iftop(整体带宽使用情况)/nethogs(精确到进程)/nstat/ifstat/mtr/sar/ip/route
硬件 Megacli(监控raid)/ipmitool(温度,cpu风扇转速)/lm_sensors(温度)

二、Zabbix监控架构

1.生命周期

LTS Long Time Support 长期维护版本

zabbix官网地址:https://www.zabbix.com/

image-20230315191544691

2.Zabbix监控架构

Zabbix是一个CS(服务端/客户端)架构的服务.

zabbix监控架构

Zabbix-Agent获取数据 发送给Zabbix-Server服务端数据会被存放 数据库 < Zabbix Web 页面展示数据

三、Zabbix快速部署

1.主机规划

规模 平台 CPU/内存 数据库 受监控的主机数量
小型 CentOS Virtual Appliance MySQL InnoDB 100
中型 CentOS 2 CPU cores/2GB MySQL InnoDB 500
大型 RedHat Enterprise Linux 4 CPU cores/8GB RAID10 MySQL InnoDB 或 PostgreSQL >1000
极大型 RedHat Enterprise Linux 8 CPU cores/16GB Fast RAID10 MySQL InnoDB 或 PostgreSQL >10000

2.容量估算

参数 所需磁盘空间的计算公式 (单位:字节)
Zabbix 配置文件 固定大小。通常为 10MB 或更少。
History (历史数据) days (items/refresh rate) 24 3600 bytes items:监控项数量。 days:保留历史数据的天数。 refresh rate:监控项的更新间隔。 bytes:保留单个值所需要占用的字节数,依赖于数据库引擎,通常为 ~90 字节
Trends (趋势数据) days (items/3600) 24 3600 bytes items:监控项数量。 days:保留历史数据的天数。 bytes:保留单个趋 势数据所需要占用的字节数,依赖于数据库引擎,通常为 ~90 字节。
Events (事件数据) days events 24 3600 bytes events:每秒产生的事件数量。假设最糟糕的情况下,每秒产生 1 个事件。 days:保留历史数据的天数。 bytes:保留单个趋势数据所需的字节数,取决于数据库引擎,通常为 ~170 字节。

3.主机规划

角色 主机名 eth0/eth1 配置
Zabbix服务端 m02 10.0.0.62/172.16.1.62 1C1G(实际推荐1C2G)
Zabbix客户端 web01 10.0.0.7/172.16.1.7 1C1G
Zabbix客户端 db01 10.0.0.51/172.16.1.51 1C1G
Zabbix客户端 nfs 10.0.0.31/172.16.1.41 1C1G

4.极速上手指南

系统:CentOS 7.x 不支持yum方式安装zabbix服务端。

安装方式:

  • zabbix服务端编译安装
  • zabbix客户端yum安装

部署zabbix服务端流程

  1. 部署ngx+php环境并测试
  2. 部署数据库 mariadb 10.5及以上 然后进行配置
  3. 编译安装zabbix-server服务端及后续配置
  4. 部署前端代码代码进行访问
  5. web访问
  6. 配置客户端

4.1 部署ngx+php环境并测试

[root@zabbix-server ~]# ll
total 130620
-rw-------. 1 root root     1340 Jan  9 09:09 anaconda-ks.cfg
-rw-r--r--  1 root root 41242602 Mar 15 10:50 zabbix-6.0.14.tar.gz
-rw-r--r--  1 root root 92505716 Mar 14 21:24 zabbix-6.0-all-rpms.tar.gz
[root@zabbix-server ~]# tar xf zabbix-6.0-all-rpms.tar.gz
[root@zabbix-server ~]# tar xf zabbix-6.0.14.tar.gz
[root@zabbix-server ~]# cd zabbix-6.0-all-rpms/
[root@zabbix-server ~/zabbix-6.0-all-rpms]# yum -y localinstall *.rpm

#配置nginx
[root@zabbix-server ~/zabbix-6.0-all-rpms]# cat /etc/nginx/conf.d/zbx.cn.conf
server {
  listen 80;
  server_name zbx.cn;
  root /app/code/zbx;
  location / {
    index index.php;
  }
  location  ~ \.php$ {
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME   $document_root$fastcgi_script_name;
    include fastcgi_params;
  }
}
[root@zabbix-server ~/zabbix-6.0-all-rpms]# systemctl enable --now nginx


#配置php
[root@zabbix-server ~/zabbix-6.0-all-rpms]# sed -ri  '/^(user|group)/s#apache#nginx#g'  /etc/php-fpm.d/www.conf
[root@zabbix-server ~/zabbix-6.0-all-rpms]# egrep 'user|group' /etc/php-fpm.d/www.conf
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
; Default Values: user and group are set as the running user
;listen.group = nobody
; these options, value is a comma separated list of user/group names.
; When set, listen.owner and listen.group are ignored
;listen.acl_users =
;listen.acl_groups =
;   user                 - the user (PHP_AUTH_USER) (or '-' if not set);
;   user:                 -
; - remove a server from a group if it is not responding (load balancing);
;      - %{user}C for user CPU only
;      - %{total}C  for user + system CPU (default)
;  %u: remote user
; FPM to .php extensions to prevent malicious users to use other extensions to
; Set session path to a directory owned by process user
[root@zabbix-server ~/zabbix-6.0-all-rpms]# systemctl enable --now php-fpm


#查看进程
[root@zabbix-server ~/zabbix-6.0-all-rpms]# ps -ef|grep nginx
root       2787      1  0 19:33 ?        00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx      2788   2787  0 19:33 ?        00:00:00 nginx: worker process
nginx      2816   2815  0 19:34 ?        00:00:00 php-fpm: pool www
nginx      2817   2815  0 19:34 ?        00:00:00 php-fpm: pool www
nginx      2818   2815  0 19:34 ?        00:00:00 php-fpm: pool www
nginx      2819   2815  0 19:34 ?        00:00:00 php-fpm: pool www
nginx      2820   2815  0 19:34 ?        00:00:00 php-fpm: pool www

4.2部署数据库

zabbix 6.0 不支持 mariadb 5.5(默认源中的mariadb)安装mariadb 10.5

#手动配置源
[root@zabbix-server ~]# cat /etc/yum.repos.d/mariadb.repo
[mariadb]
name = MariaDB
baseurl =http://mirrors.aliyun.com/mariadb/yum/10.5/centos7-amd64/
gpgkey = http://mirrors.aliyun.com/mariadb/yum/RPMGPG-KEY-MariaDB
gpgcheck = 1
enabled=1


#部署的时候已经使用rpm安装,直接启动即可
[root@zabbix-server ~/zabbix-6.0-all-rpms]# systemctl enable mariadb
[root@zabbix-server ~/zabbix-6.0-all-rpms]# systemctl start mariadb


#数据库初始化
[root@zabbix-server ~]# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] n
Change the root password? [Y/n] n
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
Thanks for using MariaDB!
[root@zabbix-server ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.5.16-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 


#创建库,创建用户
#1. 创建数据库要指定字符集
MariaDB [(none)]> create database  zabbix charset utf8    collate utf8_bin;
#2. 创建zabbix用户
MariaDB [(none)]> grant all on zabbix.*  to 'zabbix'@'localhost' identified by 'zabbix' ;

注:这里数据库和zabbix在同一台机器,只授权localhost即可

#向数据库中导入数据 表,数据。。。。
[root@zabbix-server ~]# cd zabbix-6.0.14/database/mysql/
[root@zabbix-server ~/zabbix-6.0.14/database/mysql]# ll
total 36736
-rw-r--r-- 1 1000 1000 35436120 Mar  8 19:43 data.sql
-rw-r--r-- 1 1000 1000      282 Mar  2 16:01 double.sql
-rw-r--r-- 1 1000 1000     1527 Mar  8 19:43 history_pk_prepare.sql
-rw-r--r-- 1 1000 1000  1978341 Mar  1 21:46 images.sql
-rw-r--r-- 1 1000 1000      715 Mar  8 19:43 Makefile.am
-rw-r--r-- 1 1000 1000    16572 Mar  8 19:43 Makefile.in
-rw-r--r-- 1 1000 1000   164688 Mar  8 19:43 schema.sql
[root@zabbix-server ~]# 
#注意:依次执行下面的命令
mysql  zabbix <schema.sql
mysql  zabbix <images.sql
mysql  zabbix <data.sql
mysql  zabbix <double.sql
mysql  zabbix <history_pk_prepare.sql

#检查是否导入成功
[root@zabbix-server ~/zabbix-6.0.14/database/mysql]# mysql    -e  'show tables from  zabbix;'

4.3 编译安装zabbix-server服务端及后续配置

#安装依赖(软件包中已经包含)
yum install -y mysql-devel pcre-devel openssl-devel zlib-devel libxml2-devel net-snmp-devel   net-snmp libssh2-devel OpenIPMI-devel libevent-devel openldap-devel   libcurl-devel

#进行安装
[root@zabbix-server ~]# cd zabbix-6.0.14/
#执行临时变量
[root@zabbix-server ~/zabbix-6.0.14]# export CFLAGS="-std=gnu99"
#--sysconfdir 指定配置文件目录
#--enable-server 服务端
[root@zabbix-server ~/zabbix-6.0.14]# ./configure --sysconfdir=/etc/zabbix/ --enable-server --with-mysql    --with-net-snmp  --with-libxml2  --with-ssh2  --with-openipmi   --with-zlib   --with-libpthread   --with-libevent      --with-openssl  --with-ldap  --with-libcurl  --with-libpcre
#出现下列代码表示成功
***********************************************************
*            Now run 'make install'                       *
*                                                         *
*            Thank you for using Zabbix!                  *
*              <http://www.zabbix.com>                    *
***********************************************************
[root@zabbix-server ~/zabbix-6.0.14]# make install
make[1]: Entering directory `/root/zabbix-6.0.14/misc'
make[2]: Entering directory `/root/zabbix-6.0.14/misc'
make[2]: Nothing to be done for `install-exec-am'.
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/root/zabbix-6.0.14/misc'
make[1]: Leaving directory `/root/zabbix-6.0.14/misc'
make[1]: Entering directory `/root/zabbix-6.0.14'
make[2]: Entering directory `/root/zabbix-6.0.14'
make[2]: Nothing to be done for `install-exec-am'.
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/root/zabbix-6.0.14'
make[1]: Leaving directory `/root/zabbix-6.0.14'
[root@zabbix-server ~/zabbix-6.0.14]# echo $?
0


#修改zbx服务端配置文件(DB相关)
[root@zabbix-server ~]# grep -n '^[a-Z]' /etc/zabbix/zabbix_server.conf
38:LogFile=/var/log/zabbix/zabbix_server.log    #修改了日志目录
87:DBHost=localhost								#取消了注释
99:DBName=zabbix
115:DBUser=zabbix
123:DBPassword=zabbix							#取消了注释,写了密码
507:Timeout=4
593:LogSlowQueries=3000
708:StatsAllowedIP=127.0.0.1


#创建配置文件与用户
[root@zabbix-server ~]# mkdir -p /var/log/zabbix
[root@zabbix-server ~]# useradd  -s /sbin/nologin  -M zabbix 
[root@zabbix-server ~]# chown -R zabbix.zabbix /var/log/zabbix/

#书写systemctl 配置文件
[root@zabbix-server ~]# cat /usr/lib/systemd/system/zabbix-server.service
[Unit]
Description=Zabbix Server with MySQL DB
After=syslog.target network.target 

[Service]
Type=simple
ExecStart=/usr/local/sbin/zabbix_server -f
User=zabbix

[Install]
WantedBy=multi-user.target
[root@zabbix-server ~]# systemctl daemon-reload
#启动zabbix
[root@zabbix-server ~]# systemctl enable zabbix-server
[root@zabbix-server ~]# systemctl start zabbix-server

#检查是否启动
[root@zabbix-server ~]# ps -ef|grep zabbix
如果出来一堆进程表示成功了

注意事项:

zabbix安装提示"parse.c:391:2: error: ‘for’ loop initial declarations are only allowed in C99 mode"

#make install 报下列错误
parse.c: In function ‘eval_get_last_function_token’:
parse.c:391:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
for(int i = ctx->ops.values_num - 1; i >= 0; i --)
^
parse.c:391:2: note: use option -std=c99 or -std=gnu99 to compile your code
make[3]: *** [parse.o] Error 1
make[3]: Leaving directory `/root/zabbix-6.0.14/src/libs/zbxeval'
make[2]: *** [install-recursive] Error 1
make[2]: Leaving directory `/root/zabbix-6.0.14/src/libs'
make[1]: *** [install-recursive] Error 1
make[1]: Leaving directory `/root/zabbix-6.0.14/src'
make: *** [install-recursive] Error 1

#原因:
缺少了c99环境变量
#解决:
在./configure之前执行下  export CFLAGS="-std=gnu99"
或者
使用旧版本   使用6.0.10,就没有这个问题.

4.4部署前端代码代码进行访问

[root@zabbix-server ~]# mkdir -p /app/code/zbx
[root@zabbix-server ~]# cd zabbix-6.0.14/ui/
[root@zabbix-server ~/zabbix-6.0.14/ui]# mv * /app/code/zbx
[root@zabbix-server ~/zabbix-6.0.14/ui]# chown -R nginx.nginx /app/code/zbx

4.5访问测试

#本地hosts文件C:\Windows\System32\drivers\etc
10.0.0.62 zbx.cn

image-20230315200110422

image-20230315200127421

#修改php的配置文件
[root@zabbix-server ~]# egrep -n '^(max_.*_time|post_max)'   /etc/php.ini
368:max_execution_time = 300
378:max_input_time = 600
656:post_max_size = 80M
[root@zabbix-server ~]# systemctl restart php-fpm

image-20230315200352322

image-20230315200452123

image-20230315200529830

image-20230315200548562

image-20230315200634321

image-20230315200644330

前端的配置文件(连接数据库与主机名等信息)
[root@zabbix-server ~]# egrep 'DB|ZBX_SERVER_NAME' /app/code/zbx/conf/zabbix.conf.php
$DB['TYPE']				= 'MYSQL';
$DB['SERVER']			= 'localhost';
$DB['PORT']				= '0';
$DB['DATABASE']			= 'zabbix';
$DB['USER']				= 'zabbix';
$DB['PASSWORD']			= 'zabbix';
$DB['SCHEMA']			= '';
$DB['ENCRYPTION']		= false;
$DB['KEY_FILE']			= '';
$DB['CERT_FILE']		= '';
$DB['CA_FILE']			= '';
$DB['VERIFY_HOST']		= false;
$DB['CIPHER_LIST']		= '';
$DB['VAULT_URL']		= '';
$DB['VAULT_DB_PATH']	= '';
$DB['VAULT_TOKEN']		= '';
$DB['DOUBLE_IEEE754']	= true;
$ZBX_SERVER_NAME		= 'localhost';

#ZBX_SERVER_NAME 表示标题的名字,也就是网页标题的名字,可以更改

image-20230315201343788

4.6安装客户端

#下载repo配置文件
[root@zabbix-server ~]# rpm -ivh  https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm
Retrieving https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm
warning: /var/tmp/rpm-tmp.D2tEDV: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:zabbix-release-6.0-4.el7         ################################# [100%]
#修改源
[root@zabbix-server ~]# sed -i 
's#https://repo.zabbix.com/zabbix#https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/#g'    /etc/yum.repos.d/zabbix.repo
[root@zabbix-server /etc/yum.repos.d]# sed -i 's#https://repo.zabbix.com#https://mirrors.tuna.tsinghua.edu.cn/zabbix#g'    /etc/yum.repos.d/zabbix-agent2-plugins.repo

#安装并启动客户端
[root@zabbix-server ~]# yum install -y zabbix-agent2
[root@zabbix-server ~]# systemctl enable --now zabbix-agent2.service 
[root@zabbix-server ~]# ps -ef |grep agent
zabbix    20903      1  0 20:51 ?        00:00:00 /usr/sbin/zabbix_agent2 -c /etc/zabbix/zabbix_agent2.conf


#查看配置文件
[root@zabbix-server ~]# grep '^[a-Z]' /etc/zabbix/zabbix_agent2.conf
PidFile=/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=127.0.0.1
ServerActive=127.0.0.1
Hostname=Zabbix server
Include=/etc/zabbix/zabbix_agent2.d/*.conf
PluginSocket=/run/zabbix/agent.plugin.sock
ControlSocket=/run/zabbix/agent.sock
Include=./zabbix_agent2.d/plugins.d/*.conf

卸载noarch

[root@zabbix-server ~]# rpm -e zabbix-release-6.0-4.el7.noarch

image-20230315205338198

四、查看数据

image-20230315205435586

image-20230315205456115

五、zbx显示中文乱码

image-20230315205636801

#从本地电脑的字体库里拷一个上去,我这里拷的是微软雅黑的   C:\Windows\Fonts\msyh.ttc
[root@zabbix-server ~]# cp /app/code/zbx/assets/fonts/DejaVuSans.ttf{,.bak} 
[root@zabbix-server ~]# cp msyh.ttc /app/code/zbx/assets/fonts/DejaVuSans.ttf
cp: overwrite ‘/app/code/zbx/assets/fonts/DejaVuSans.ttf’? y

image-20230315210015863

六、zbx配置详解

1. 服务端配置

文件和目录 说明
/etc/zabbix/zabbix_server.conf 配置文件
/var/log/zabbix/zabbix_server.log 当前放在/tmp/下面
/usr/lib/systemd/system/zabbix-server.service 手写的systemctl管理文件 如果yum、rpm安装自带
/usr/local/share/zabbix/alertscripts/ 用于实现告警的脚本。

2.客户端配置

目录 说明
/etc/zabbix/zabbix_agent2.conf 配置文件
/etc/zabbix/zabbix_agent2.d/ 子配置文件目录,用于自定义监控。
/var/log/zabbix 日志

七、 监控任意主机流程

1.配置客户端

#1. 配置zbx源
rpm -ivh  https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm
sed -i 's#https://repo.zabbix.com/zabbix#https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/#g'    /etc/yum.repos.d/zabbix.repo
#2. 安装客户端 
yum install -y zabbix-agent2

#启动
systemctl enable --now zabbix-agent2


#修改配置文件
[root@nfs ~]# grep -n '^[a-Z]' /etc/zabbix/zabbix_agent2.conf
13:PidFile=/run/zabbix/zabbix_agent2.pid
32:LogFile=/var/log/zabbix/zabbix_agent2.log
43:LogFileSize=0
80:Server=172.16.1.62   		#修改这一行的ip
133:ServerActive=172.16.1.62	#修改这一行的ip
144:Hostname=Zabbix server
281:Include=/etc/zabbix/zabbix_agent2.d/*.conf
302:PluginSocket=/run/zabbix/agent.plugin.sock
345:ControlSocket=/run/zabbix/agent.sock
490:Include=./zabbix_agent2.d/plugins.d/*.conf

#重启服务
systemctl restart zabbix-agent2.service

2.web页面添加主机

image-20230315210748899

image-20230315211047674

温馨提示:主机名称部分要填写客户端主机名或ip,如果是主机名 主机名要能解析

image-20230315211110704

等待这里变绿即可

八、通过模板帮助你监控任意服务

添加服务

image-20230315211430817

#添加监控的配置文件
[root@web01 ~]# cat /etc/nginx/conf.d/status.conf 
server{
	listen 8000;
	location / {
		stub_status;
	}

}
[root@web01 ~]# systemctl restart nginx

image-20230315211628910

image-20230315211701522

九、自定义监控

客户端:书写命令或脚本,修改配置文件.

服务端:测试,web页面操作.

步骤 流程
客户端 linux: 通过命令、脚本取出对应的值
linux:根据zbx要求按照格式,书写配置文件,创建键值
linux:重启客户端客户端测试键值是否可用
服务端 linux:服务端测试键值是否可用
web页面: 键值与监控项关联
web页面: 测试
web页面:图形
web页面:触发器(报警)

1.客户端

#创建键值与重启
UserParameter=key,cmd
UserParameter=  固定写法,表示要自定义键值
key             表示键值名字,命名最好就是 单词+"." (点)
cmd             表示命令或脚本

[root@web01 ~]# cat /etc/zabbix/zabbix_agent2.d/web.conf
UserParameter=ngx.port,ss -lntup |grep -w 80|wc -l
UserParameter=user.login[*],lastlog -u "$1" |awk 'NR==2{print $$3}'
[root@web01 ~]# systemctl restart zabbix-agent2.service

#客户端本地测试键值
[root@web01 ~]# zabbix_agent2 -t ngx.port
ngx.port                                      [s|1]

[s|1]:
s表示类型 文字
1表示结果 键值的结果

2.服务端

2.1手动测试

#安装zabbix-get
[root@zabbix-server ~]# yum -y install zabbix-get
#测试
[root@zabbix-server ~]# zabbix_get -s 172.16.1.7 -k ngx.port
1

-s 客户端ip地址
-p 客户端端口号(默认是10050)
-k 指定键值

注意事项:

[root@m02 ~]# zabbix_get -s 172.16.1.7 -k ngx.port
ZBX_NOTSUPPORTED: Unknown metric ngx.port
客户端没有重启zabbix_agent2

2.2 创建监控项

image-20230316193735074

image-20230316193747243

image-20230316193900678

配置监控项名字,填写:键值

信息类型:这里键值结果都是数字,选择数字(无正负即可),如果有小数选择浮点类型,如果是字符,选择字符串。

更新间隔:这里调整为10秒,生产环境非必须尽量增长间隔比如1m,10m,1h等等。

历史数据与趋势数据 说明 推荐配置
历史数据(history)保留时长: 每个更新间隔获取到的数据 推荐空间不乐观 可以设置为30d
趋势数据(trend)保留时长: 记 记录数据变化的趋势,占用空间较少 推荐保留更长时间 3650d

image-20230316193921477

image-20230316193937740

image-20230316194000691

2.3 创建触发器

image-20230316194236306image-20230316194325112

image-20230316194339160

image-20230316194352313

image-20230316194420662

image-20230316194453761

image-20230316194507677

2.4测试

把web01的nginx停掉

image-20230316194713529

image-20230316194802833

image-20230316194825716

2.5仪表盘数据刷新调整

image-20230316194909780

2.6添加图形

image-20230316195020808

image-20230316195032336

image-20230316195111516

image-20230316195145992

image-20230316195129328

3.常用键值与触发器函数

3.1键值

官网:https://www.zabbix.com/documentation/6.0/zh/manual/config/items/itemtypes/zabbix_agent

键值 说明
agent.hostname 主机名 获取的是客户端配置文件中指定的主机名
system.hostname 主机名 系统的主机名 类似于hostname
agent.ping 服务端与客户端是否通畅 通1 不通非1
net.if.in[if,] 网络接口上传(进入)流量统计。返回 整数 if表示网卡名字 可以忽略。
net.if.out[if,] 流出流量统计。返回整数
proc.num[,,,,] 进程数。返回整数 name进程名字 user用户 state进程状态 cmdline进程对应的命令
net.tcp.port[,port] 检查是否能建立 TCP 连接到指定端口。 返回 0 - 不能连接;1 - 可以连接
[root@zabbix-server ~]# zabbix_get -s 172.16.1.7 -k proc.num[nginx]
2
[root@zabbix-server ~]# zabbix_get -s 172.16.1.7 -k net.tcp.port[,80]
1

3.2 触发器函数

功能(函数) 说明
对比与比较
last() 最近值 (最新的值),取出最近一些值
nodata() 是否有数据
diff() 是否发生变化 一般配合md5check()
进行计算
avg() 平均值
min() 最小值
max() 最大值
案例:目的是用来检查/etc/passwd的变化情况,间接检查是否有用户增加或删除
last(/Zabbix server/vfs.file.cksum[/etc/passwd,sha256],#1) <>
last(/Zabbix server/vfs.file.cksum[/etc/passwd,sha256],#2)

倒数第1个md5的值和倒数第2个md5的是 如果不相等了,则报警.
目的是用来检查/etc/passwd的变化情况,间接检查是否有用户增加或删除.

4.参数案例 检查指定用户是否存在异地登录

4.1 客户端

[root@web01 ~]# cat /etc/zabbix/zabbix_agent2.d/web.conf
UserParameter=ngx.port,ss -lntup |grep -w 80|wc -l
UserParameter=user.login[*],lastlog -u "$1" |awk 'NR==2{print $$3}'    #这一行

如果使用自定义键值传参,awk取列的时候要使用$$列。

4.2 服务端

[root@zabbix-server ~]# zabbix_get -s 172.16.1.7 -k user.login[root]
10.0.0.31

image-20230316200647796

image-20230316200905617

image-20230316200735381

image-20230316200943249

image-20230316201026516

image-20230316201053524

换个虚拟机访问一下web01就会发现出现警告了

image-20230316201232417

5.使用模板

5.1创建模板

image-20230316201425776

image-20230316201510630

5.2从主机中添加自定义监控项

image-20230316201621760

image-20230316201649850

5.3复制触发器与图形

image-20230316201734801

image-20230316201750684

image-20230316201805190

image-20230316201826464

5.4查看模板

image-20230316201855050

5.5 模板关联主机

image-20230316201956662

image-20230316202028597

image-20230316202038190

image-20230316202208500

错误提示:
unkown metric xxxx 未知的键值(监控项)
原因:客户端没有对应的自定义的键值.
解决:复制过去对应的键值即可.

十、 监控告警

1.告警分类

报警方式 企业应用场景
发邮件 企业邮箱,免费使用
企业微信-告警应用(机器人) 需要使用企业微信,免费
OA系统( 钉钉,飞鸽,) 与阿里云,免费
短信 0.045元/条左右 (阿里云短信服务) 收费
电话 收费
第三方报警工具/平台: onealert (省事) 只需要配置onealert的平台信息,免费使用(限制),收费

2. 邮件报警

2.1全流程

✔ 个人邮箱/企业邮箱

✔ 开启个人邮箱 smtp功能 获取授权码

✔ 发件人: 配置zabbix 报警媒介类型

✔ 收件人:配置 用户 接收报警

✔ 发件条件: 配置动作

2.2 个人邮箱准备

image-20230316202642687

image-20230316202716426

2.3 配置发件人

2.3.1配置发件人-报警媒介

image-20230316202849817

添加发件人信息

smtp.163.com

密码:163的授权码

image-20230316205429990

告警邮件内容: Messages template

主题:   
故障名称: {EVENT.NAME}
消息:
故障始于 时间: {EVENT.TIME} 日期: {EVENT.DATE}
故障名称: {EVENT.NAME}
故障主机: {HOST.NAME}
严重程度: {EVENT.SEVERITY}
额外信息: {EVENT.OPDATA}
故障ID: {EVENT.ID}
触发器地址: {TRIGGER.URL}

#信息类型是: Problem recov 故障解决的时候
主题: 
故障解决 in {EVENT.DURATION}: {EVENT.NAME}
消息:
故障已经解决 时间: {EVENT.RECOVERY.TIME} 日期:{EVENT.RECOVERY.DATE}
故障名称: {EVENT.NAME}
故障持续时间: {EVENT.DURATION}
故障主机: {HOST.NAME}
故障级别: {EVENT.SEVERITY}
故障ID: {EVENT.ID}
{TRIGGER.URL}

image-20230316203342380

image-20230316203444994

image-20230316203538040

image-20230316205607559

故障:zabbix提示"Failure when receiving data from the peer: response reading failed"

原因:里边的参数配错了

我用的465端口,没选安全连接为ssl

image-20230316204934795

2.3.2 配置收件人

image-20230316204322701

image-20230316204353460

2.4 什么条件下给用户发送邮件?(条件/动作)

把状态修改为启用

image-20230316205633463

动作里可以新增一些触发条件,这里默认全部

image-20230316205742092

故障:zabbix提示"No message defined for media type."

这个报错为消息模板未定义,即是通知内容模板未写

原因:我发件人配置的时候没有写模板

image-20230316210417238

image-20230316210629447

image-20230316210646062

image-20230316210718455

3.企业微信报警

3.1准备企业微信

#1.企业微信 id号
企业ID

#2.创建1个报警机器人(应用)
机器人的id(应用id)  
AgentId

应用密码  



企业微信开启企业可信IP

3.2配置脚本

#修改微信报警的脚本
vim /usr/local/share/zabbix/alertscripts/wechat.py

#!/usr/bin/env python3
#-*- coding: utf-8 -*-
#author: wh
#comment: Zabbix Wechat Alerts Scripts

import requests
import sys
import os
import json
import logging

logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s',
                datefmt = '%a, %d %b %Y %H:%M:%S',
                filename = os.path.join('/tmp','wechat.log'),
                filemode = 'a')

#id和secret需要修改
#企业id
corpid='企业id'
#告警机器人的id
agentid=告警机器人的id
#告警机器人的secret
appsecret='告警机器人的secret'

#获取accesstoken
token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
req=requests.get(token_url)
accesstoken=req.json()['access_token']

#发送消息
msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken

#脚本参数
touser=sys.argv[1]
#toparty=sys.argv[1]
subject=sys.argv[2]
message=sys.argv[2] + "\n\n" +sys.argv[3]

params={
        "touser": touser,
#       "toparty": toparty,
        "msgtype": "text",
        "agentid": agentid,
        "text": {
                "content": message
        },
        "safe":0
}

req=requests.post(msgsend_url, data=json.dumps(params))

#书写日志/tmp/wechat.log
logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message)                    #logging.info('sendto:' + toparty + ';;subject:' + subject + ';;message:' + message)                                      

3.3 安装依赖

#安装python环境
yum install -y python3 python3-pip
通过pip3 命令安装requests依赖.
pip3 install -i https:pypi.tuna.tsinghua.edu.cn/simple requests

#测试
python3 wechat.py 用户的id或组id 标题   内容

3.4 页面配置

#web页面 发件人:报警媒介类型
{ALERT.SENDTO}  #发给谁
{ALERT.SUBJECT} #报警标题
{ALERT.MESSAGE} #报警内容

故障目前已经解决时间: {EVENT.RECOVERY.TIME} 日期
{EVENT.RECOVERY.DATE}
故障名称: {EVENT.NAME}
故障经历多久: {EVENT.DURATION}
故障主机: {HOST.NAME}
故障级别: {EVENT.SEVERITY}
故障ID: {EVENT.ID}
{TRIGGER.URL}

添加发件人

image-20230316211633928

添加收件人

image-20230316211825492

练习

● 自定义监控tcp链接状态11种
UserParameter=tcp.LISTEN,ss -lntp |grep "LISTEN" |wc -l
CLOSED
LISTEN
SYN_RCVD
SYN_SENT
ESTABLISHED
FIN_WAIT_1 
FIN_WAIT_2
TIME_WAIT
CLOSING 
CLOSE_WAIT 
LAST_ACK
● 自定义监控ngx错误日志中最近200行里error的数量
UserParameter=nginx.error,head /var/log/nginx/error.log -n200 |grep error |wc -l
● 自定义监控ngx访问日志每种状态码的数量。
UserParameter=status.200,awk '$(NF-4)=="200"{print $(NF-4)}' /var/log/nginx/access.log|wc -l
● 自定义监控网站https证书过期剩余天数,小于30就告警。
UserParameter=ssl.expire.days,sh /etc/zabbix/zabbix_agent2.d/check_ssl.sh
[root@web03 ~]# vim /server/scripts/check_ssl.sh
#!/bin/bash
#author:wh
#desc:检查证书的到期时间

url=https://www.baidu.com
#获取过期时间
expire_date=`curl -vL ${url} |& grep 'expire date'|awk -F ': ' '{print $2}'`
#格式化过期时间
expire_date_day=`date -d "${expire_date}" +%F`

#过期时间装换为秒
expire_date_second=`date -d "${expire_date}" +%s`
#现在的时间装换为秒
date_now_second=`date +%s`

#过期的时间
expire_days=`echo "(${expire_date_second}-${date_now_second})/60/60/24" |bc`
echo ${expire_days}

十一、zabbix-agent

1.Zabbix客户端概述

zabbix客户端 应用场景
Zabbix-agent2 (最常用) 适用于几乎所有情况,支持自定义监控,linux,windows, android/ios
SNMP客户端 用于监控网络设备: Simple Network Management Protocal 简单网络管理协议 监控网络设备
JMX Java-gateway 监控java app(tomcat), 未来推荐自定义监控(zabbix_agents2 + jmap/jstats)
IPMI 监控硬件(物理服务器,联想(IBM X86架构 ThinkServer) ,华为,浪潮,Dell,IBM,HP) 直接使用自定义监 控(ipmitool + megacli )

2.Zabbix-agent监控windows/mac

2.1安装windows客户端

主机名中不要包含中文

安装目录及配置文件C:\Program Files\Zabbix Agent 2

LogFile=C:\Program Files\Zabbix Agent
2\zabbix_agent2.log
Server=10.0.0.62
ServerActive=10.0.0.62
Hostname=DESKTOP-GAMESOFT
ControlSocket=\\.\pipe\agent.sock

2.2添加主机

image-20230320191605499

3.网络监控SNMP

snmp: 简单网络管理协议.

流程:

开启网络设备的SNMP功能,设置社团名字(v2c) (v3 用户名+密码)

WEB添加主机,配置接口,关联模板。

SNMP有多个版本
v2c版本使用团体名作为认证。
v3版本用户名和密码认证。

#测试
yum install -y net-snmp-utils
snmpwalk -v 2c  -c 社团名字  路由器ip SysDesc

snmpwalk 命令 使用get方式访问网络设备
-c 团体名称   #v2c版本使用 团体名称
-v 指定 snmp版本 #v2c v3  
ip地址
指令(获取网络设备的信息)   名称方式/oid(#oid Object ID 事务id 给世间万物设置独一无二的id号)

[root@m02 ~]# snmpwalk -v 2c  -c 社团名  192.168.15.1  SysDesc
SNMPv2-MIB::sysDescr.0 = STRING: H3C Product Version ERHMG2-MNW100-R1114
H3C ERHMG2
Copyright(c) 2014-2017 Hangzhou H3C Technologies Co., Ltd. All rights reserved.

3.1开启网络设备snmp功能

image-20230320192059835

image-20230320192237389

3.2添加主机

image-20230320192529974

image-20230320192601393

4.监控java应用

4.1方案选型与原理

监控方案 说明
开启java jmxremote远程监控功能 zbx中关联对应的模板,安装与开启java工具zbx-java-gateway
通过java命令,自定义监控获取想要指标 通过在java应用服务器安装zbx agent和java命令(jmap,jstack),然后自定 义监控。

4.2开启java jmxremote远程监控功能

4.2.1 客户端开启远程监控功能
[root@web03 ~]# cat /app/tools/tomcat/bin/catalina.sh 
#!/bin/sh
CATALINA_OPTS="$CATALINA_OPTS   \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname=172.16.1.9"   #修改为自己的ip地址
[root@web03 ~]# systemctl restart tomcat
[root@web03 ~]# ss -lntup|grep 12345
tcp    LISTEN     0      50     [::]:12345              [::]:*                   users:(("java",pid=93276,fd=21))
4.2.2 zabbix服务端部署java gateway 配置
[root@zabbix-server ~]# yum install -y zabbix-java-gateway
[root@zabbix-server ~]# systemctl enable --now  zabbix-java-gateway.service

[root@zabbix-server ~]# grep '^[a-Z]' /etc/zabbix/zabbix_java_gateway.conf
LISTEN_PORT=10052   #取消注释
PID_FILE="/var/run/zabbix/zabbix_java_gateway.pid"
[root@zabbix-server ~]# systemctl restart zabbix-java-gateway.service

[root@zabbix-server ~]# grep -n 'Java.*=' /etc/zabbix/zabbix_server.conf
317:JavaGateway=127.0.0.1
325:JavaGatewayPort=10052
333:StartJavaPollers=5
[root@zabbix-server ~]# systemctl restart zabbix-server.service 
4.2.3 添加主机

image-20230320194606031

补充:

jar包启动配置

java -jar xxx.jar
java -Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname=172.16.1.9 \
-jar xxx.jar

5.监控硬件设备

监控方案 步骤
方案01 开启设备的ipmi功能监控,添加接口的时候选择ipmi即可.(进入物理设备的bios系统.LAN局域网访问.)
方案02 通过客户端命令获取指标实现监控硬件:megacli和ipmitool

通过命令自定义监控

命令 说明
megacli 用于获取raid卡状态
ipmitool cpu温度,风扇转速

image-20230320195523780

十一、自动化

自动添加主机方案 含义 应用场景
自动发现(服务端主动) zbx服务端主动去找是否有新的主机,如果有则添加进来,关联模板 配置简单,大量添加主机不适合。临 时性可用。
自动注册(客户端主动) zbx客户端主动去找服务端提交自己的信息,请求向服务端注册。 配置繁琐,经常性。大量主机。

1.自动发现

✔ 客户端(zbx agent),配置文件.

✔ web配置自动发现规则. - 发现主机

✔ web配置自动发现的动作 - 发现主机后关联模板,添加主机,加入主机组,启用

1.1 web配置自动发现规则

多个地址:ip范围写成172.16.1.31-100

为了测试快,更新间隔改为10s

image-20230320200508169

1.2web配置动作

image-20230320200745416

image-20230320200830439

image-20230320200913800

image-20230320201652408

image-20230320201734402

2.自动注册

应用场景,经常性添加主机

准备:

关闭 自动发现 规则

关闭 自动发现 动作

自动发现的主机 删除

✔ zbx客户端配置: 修改zabbix客户端配置文件: ServerActive=服务端ip 和Hostname=.....

✔ web页面: 动作自动注册 autoreg......

2.1zbx客户端配置文件

客户端主动把自己的信息,提供给服务端。

服务端收到数据后通过 自动注册动作,判断与添加。

zbx客户端配置文件

[root@nfs ~]# grep '^[a-Z]' /etc/zabbix/zabbix_agent2.conf 
PidFile=/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
#服务端地址。
Server=172.16.1.62
#主动模式下的服务端ip地址。
ServerActive=172.16.1.62
#当前主机名,这个可以注释掉或使用ansible配置。建议注释使用下面的内容,自动获取主机名
#Hostname=web01 
#通过后面指定的键值获取主机名。Item监控项、键值。
HostnameItem=system.hostname
#主机的 元数据 键值,类似于自动发现中的system.uname判断存活和获取主机信息。
HostMetadataItem=system.uname
Include=/etc/zabbix/zabbix_agent2.d/*.conf
PluginSocket=/run/zabbix/agent.plugin.sock
ControlSocket=/run/zabbix/agent.sock
Include=./zabbix_agent2.d/plugins.d/*.conf
[root@nfs ~]# systemctl restart zabbix-agent2.service

2.2 web配置

image-20230320202904956

image-20230320203857757

image-20230320203200532

image-20230320203908733

十二、分布式监控实战

应对公司网站服务器较多场景.

公司网站服务器分散在不同的机房或地区(跨机房)

1. 分布式监控搭建

#安装代理
yum install -y https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-proxy-mysql-6.0.5-1.el7.x86_64.rpm

#安装与启动数据库
通过rpm包安装

#进入数据库创建库,创建用户。
create database zabbix_proxy character set utf8 collate utf8_bin;
grant all privileges on zabbix_proxy.* to zabbix_proxy@'localhost' identified by 'zabbix_proxy';

#导入数据库(初始化zbx_proxy)
mysql -uroot zabbix_proxy <schema.sql

zabbix_proxy 初始化脚本说明

zbx 5.x 初始化脚本在软件包中有。

zcat /usr/share/doc/zabbix-proxy-mysqlschema.sql.gz | mysql -uzabbix -p123456 zabbix_proxy

zbx 6.x 需要使用源码包中database/mysql/schema.sql,使用这1个就行

#修改代理配置文件
[root@web01 ~]# grep '^[a-Z]' /etc/zabbix/zabbix_proxy.conf
Server=172.16.1.63
Hostname=shanghai_proxy      #这个名字要记住,web页面需要
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
PidFile=/run/zabbix/zabbix_proxy.pid
SocketDir=/run/zabbix
DBHost=localhost			#修改这里
DBName=zabbix_proxy			#修改这里
DBUser=zabbix_proxy			#修改这里
DBPassword=zabbix_proxy		#修改这里
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1

systemctl enable --now zabbix-proxy.service

#查看代理日志 报错
cannot send proxy data to server at "172.16.1.63": proxy "shanghai_proxy" not found

2.web页面添加代理

image-20230320204657225 image-20230320204804652

3. zbx-客户端修改

[root@web03 ~]# grep '^[a-Z]' /etc/zabbix/zabbix_agent2.conf
PidFile=/var/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=172.16.1.7				#配置为代理服务器
ServerActive=172.16.1.7			#配置为代理服务器
HostnameItem=system.hostname	#修改这里
HostMetadataItem=system.uname	#修改这里
Include=/etc/zabbix/zabbix_agent2.d/*.conf
ControlSocket=/tmp/agent.sock
Include=./zabbix_agent2.d/plugins.d/*.conf

4.web页面修改,修改这些服务器通过代理获取数据的。

image-20230320205238695

image-20230320205301162

十三、低级自动发现(了解)

自动发现、自动注册用于发现主机。

LLD 低级自动发现,用于发现 监控项 (触发器,图形),一般用于发现网卡,发现磁盘分区。。。。

十四、 zbx api

1.api概述

api Application Programming Interface 应用程序编程接口 (相当于是shell函数作用)

api接口应用场景:

发送企业微信消息,人脸识别,短信验证,身份验证 使用第3方,功能即可.

使用与调用:

自己写程序调用:直接通过程序代码进行调用(shell,python,golang,),需要参考对方的api接口文档(请求参数,要求的格式)

api接口调试工具:apipost,postman

官方写好的你来使用(SDK 一般指软件开发工具包): 通过sdk样例快速调用和使用即可.

2.zabbix api

开源软件/商业软件的的api接口: 进行二次开发.

cmdb (存储与管理企业IT架构中设备的各种配置信息) : 自动化运维平台,web页面管理(Golang,Python)

3.zbx api使用流程

api接口使用流程:

根据zabbix用户名和密码,获取token(令牌)

使用token,访问或调取zabbix资源

获取token

image-20230320205621835

image-20230320205706637

[root@zabbix-server ~]# cat /etc/hosts

172.16.1.62 zbx.cn  #添加这个

[root@zabbix-server ~]# yum -y install jq

#前提条件
[root@zabbix-server ~]# cat /etc/nginx/conf.d/zbx.cn.conf 
server {
  listen 80;
  server_name zbx.cn;
  root /app/code/zbx;
  location / {
    index index.php;
  }
  location  ~ \.php$ {
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME   $document_root$fastcgi_script_name;
    include fastcgi_params;
  }
}


#curl命令
[root@zabbix-server ~]# curl -X POST -H "Content-Type: application/json-rpc" -d '
> {
>     "jsonrpc": "2.0",
>     "method": "host.get",
>     "params": {
>         "output": [
>             "hostid",
>             "host"
>         ],
>         "selectInterfaces": [
>             "interfaceid",
>             "ip"
>         ]
>     },
>     "id": 2,
>     "auth": "71b96c633ba157a05cf3e616532aa40d8e70e82be6bafb62be94715d41b3ac56"
> }'  http://zbx.cn/api_jsonrpc.php |jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   715    0   392  100   323   1994   1643 --:--:-- --:--:-- --:--:--  2000
{
  "jsonrpc": "2.0",
  "result": [
    {
      "hostid": "10084",
      "host": "Zabbix server",
      "interfaces": [
        {
          "interfaceid": "1",
          "ip": "127.0.0.1"
        }
      ]
    },
    {
      "hostid": "10562",
      "host": "web03",
      "interfaces": [
        {
          "interfaceid": "17",
          "ip": "172.16.1.9"
        }
      ]
    },
    {
      "hostid": "10564",
      "host": "nfs",
      "interfaces": [
        {
          "interfaceid": "19",
          "ip": "172.16.1.31"
        }
      ]
    },
    {
      "hostid": "10559",
      "host": "web01",
      "interfaces": [
        {
          "interfaceid": "15",
          "ip": "172.16.1.7"
        }
      ]
    }
  ],
  "id": 2
}


-X 指定请求方法
-H 修改请求头
-d 发出POST请求,要上传的内容。

十五、web监测

image-20230320211946349

image-20230320211958407

image-20230320212138771

image-20230320212307514

image-20230320212424827

image-20230320212440030

image-20230320212504141

十六、zabbix性能优化

1.优化概述

performance tunning 性能调优

网站架构调整: 尽量让用户的请求往前推(用户请求不要到达你的网站走cdn,各种缓存,消息队列)

读? 写? 拆分思想.

2.硬件优化

硬件优化 : cpu,内存,磁盘,网卡(10G万兆网卡,光纤 ),raid

3. Zabbix服务端配置优化

zabbix参数的配置: 缓存和进程数量

xxxxcache 用于zabbix服务端缓存获取的各类数据 (历史数据,趋势数据....)

poller zabbix用于数据采集进程 (接收agent的数据的进程 接收snmp 接收jmx 接收ipmi.....)

根据图形调整缓存

# 用于存储主机、监控项、触发器数据的共享内存大小
CacheSize=8M  #512M 边调节边看监控 Zabbix server:		 这个常改
Zabbix cache usage, % free
# 历史数据缓存
HistoryCacheSize=16M
#历史数据索引的缓存
HistoryIndexCacheSize=4M
#趋势数据缓存
TrendCacheSize=4M
#值的缓存
ValueCacheSize=8M

根据图形调整进程数量
# 收集数据进程的数量
StartPollers=5
# 客户端/主机 不可达 可达主机 (包括IPMI 和 Java)的轮询进程
的初始实例数量
StartPollersUnreachable=1
#用于接收http客户端的数据  
StartHTTPPollers=1
#用于收集客户端jmx的数据 (默认是0) java-gateway的时候使用    这个常改
StartJavaPollers=5
#用于收集zabbix proxy代理的数据的进程数 默认是1
StartProxyPollers=1
#收集ipmi客户端数据
StartIPMIPollers=0

4. Zabbix客户端配置优化

调整zbx客户端的模式。默认是被动模式,改为主动模式。 zbx被动模式简单,zbx服务端压力大。zbx主动模式,适用于大量主机监控。

主动模式注意事项:

改完配置后,主机客户端类型也要改(zbx客户端主动模式),web模板也要修改

不绿了。如果监控中只有主动模式,不绿了。

主动模式配置
grep '^[a-Z]' /etc/zabbix/zabbix_agent2.conf
PidFile=/var/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=172.16.1.62
ServerActive=172.16.1.62         修改为服务端ip
#Hostname 这个注释掉
HostnameItem=system.hostname     修改为键值
Include=/etc/zabbix/zabbix_agent2.d/*.conf
ControlSocket=/tmp/agent.sock
Include=./zabbix_agent2.d/plugins.d/*.conf

关联主动模式zbx模板,这种带active都是主动模板

image-20230320213027637

5. Zabbix键值与监控项优化

zabbix 键值与监控项处理:

增加更新间隔时间5m 10m

推荐使用自定义模板,控制功能全面监控,监控项少,精简监控项 (精简)

历史数据保留时长减少 设置为30d或7d, 增加趋势存储时间保留时间 365d

6.zabbix网站架构容量评估.

#zabbix占用磁盘空间的计算
######关于历史数据的空间设置
Zabbix 将接收到的值保存一段固定的时间,通常为几周或几个月。每个新值都需要一定量的磁盘空间用于数据和索引。
所以,如果我们每秒收到 50 个值,且希望保留 30 天的历史数据,值的总数将大约在 (30*24*3600)* 50 = 129,60 0,000,即大约130M 个值。
根据所使用的数据库引擎,接收值的类型(浮点数、整数、字符串、日志文件等),单个值的磁盘空间可能在 40 字节到数百字节之间变化。 
通常,数值类型的每个值大约为 90 个字节。
在上面的例子中,这意味着 130M 个值需要占用 1 3000 0000 *90 bytes = 10.9GB 磁盘空间。
文本和日志类型的监控项值的大小是无法确定的,但可以以每个值大约500 字节来计算。

#####趋势数据的空间设置
Zabbix 为表 trends 中的每个项目保留1小时的最大值 / 最小值 / 平均值 / 统计值。 该数据用于趋势图形和历史数据图形。 这一个小时的时间段是无法自定义。Zabbix数据库,根据数据库类型,每个值总共需要大约90个字节。
假设我们希望将趋势数据保持5年。 3000 个监控项的值每年需要占用3000*24*365* 90 = 2.2GB 空间,或者5年需要占用 11GB 空间。

7.zabbix 触发器

尽量使用 .last() (最新数据) .nodata() (是否有数据)

避免使用需要计算函数 .max() .min() .avg()

整体目标:不要让zabbix服务端进行计算/数据库进行计数,需要计算的内容放在客户端(自定义监控项)

8.zabbix数据库优化

根据业务类型调整:读少写多

1:zabbix是一个写多读少的业务,优化数据库的写入性能,建议使用InnoDB存储引擎或tokudb存储引擎

2:数据库分离或数据库拆分

十七、Zabbix高可用与升级

zbx 6.x 之前-zbx_server 多个+keepalived实现高可用即可。

zbx 6.x 开始 自带ha功能

#添加远程连接zbx数据库的用户
grant all on zabbix.* to 'zabbix'@'172.16.1.%'  identified by 'zabbix';



[root@zabbix-server ~]# grep '^[a-Z]'   /etc/zabbix/zabbix_server.conf
LogFile=/var/log/zabbix/zabbix_server.log
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
JavaGateway=127.0.0.1
JavaGatewayPort=10052
StartJavaPollers=5
Timeout=4
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1
HANodeName=zabbix-server			#添加这一行
NodeAddress=172.16.1.62:10051		#添加这一行
[root@zabbix-server ~]# systemctl restart zabbix-server.service


[root@m03 ~]# grep '^[a-Z]'   /etc/zabbix/zabbix_server.conf
LogFile=/var/log/zabbix/zabbix_server.log
DBHost=172.16.1.62				#修改这一行
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
JavaGateway=127.0.0.1
JavaGatewayPort=10052
StartJavaPollers=5
CacheSize=64M
Timeout=4
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1
HANodeName=m03					#添加这一行			
NodeAddress=172.16.1.63:10051	#添加这一行

[root@m03 ~]# zabbix_server -R ha_status
Runtime commands can be executed only in active mode
[root@zabbix-server ~]# zabbix_server -R ha_status
Failover delay: 60 seconds
Cluster status:
#  ID                         Name            Address                   Status      Last Access
1. clfgvjmcd0001se2ttevmbm7m  zabbix-server    172.16.1.62:10051        active      3s
2. clfgvo0sl0001xv6v2161z91r  m03              172.16.1.63:10051        standby     3s
#客户端配置
[root@web03 ~]# grep '^[a-Z]' /etc/zabbix/zabbix_agent2.conf
PidFile=/var/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=172.16.1.63,172.16.1.62           #多个服务端,这里逗号分隔
ip、主机名要用逗号分隔。
ServerActive=172.16.1.63;172.16.1.62     #多个ha集群,这里分号分隔
节点名字或ip,要用分号分隔。
HostnameItem=system.hostname
Include=/etc/zabbix/zabbix_agent2.d/*.conf
ControlSocket=/tmp/agent.sock
Include=./zabbix_agent2.d/plugins.d/*.conf

image-20230320215344121

image-20230320215438374

image-20230320215547448

十八、升级

升级流程

1.准备好新的数据库,备份好旧的数据库内容。

2.按照数据库升级 要求变更数据库内容

3.准备新的zabbix_server(rpm包)、命令和配置文件。

4.备份,替换旧的zbx_server命令.检查。

5.前端页面,根据要求准备好php对应版本即可。

6.备份,放入新的前端代码即可。

7.调试。