==服务端==

一、环境准备

方法一:
上传nginx+php72+mariadb10.5.26.zip
[root@zabbix]# tar xf nginx+php72+mariadb10.5.26.zip
[root@zabbix]# cd nginx+php72+mariadb10.5.26/
[root@zabbix ~]# yum localinstall -y *

方法二:
1.配置nginx源
[root@zabbix ~]# vim /etc/yum.repos.d/nginx.repo 
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https:nginx.org/keys/nginx_signing.key
module_hotfixes=true

2.安装php+nginx
[root@zabbix ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@zabbix ~]# yum install epel-release.noarch -y 
[root@zabbix ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo  #epel源
[root@zabbix ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm       #这是php的yum源
[root@zabbix ~]# yum install php72w-cli php72w-fpm php72w-gd php72w-mbstring php72w-bcmath php72w-xml php72w-ldap php72w-mysqlnd nginx -y 

3.安装mariadb
[root@zabbix ~]# vim /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/RPM-GPG-KEY-MariaDB
gpgcheck = 1
enabled=1
[root@zabbix ~]# yum install -y mariadb-server

二、配置nginx+php+mariadb

1.配置nginx
[root@zabbix ~]# cat /etc/nginx/conf.d/zbx.conf 
server {
    listen 80;
    server_name zbx.koiz1.com;
    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 ~]# systemctl enable --now nginx

2.配置php-fpm
[root@zabbix ~]# sed -ri '/^(user|group)/s#apache#nginx#g' /etc/php-fpm.d/www.conf  #修改启动用户
[root@zabbix ~]# egrep '^(user|group)' /etc/php-fpm.d/www.conf
user = nginx
group = nginx
[root@zabbix ~]# systemctl enable --now php-fpm

3.配置数据库
[root@zabbix ~]# mysql_secure_installation      #初始化数据库
回车 nnyyyyy
[root@zabbix ~]# mysql

MariaDB [(none)]> #1.创建数据库要指定字符集
MariaDB [(none)]> create database zabbix charset utf8 collate utf8_bin;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> #2.创建zabbix用户
MariaDB [(none)]> grant all on zabbix.* to 'zabbix'@'localhost' identified by 'zabbix';
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]> show databases;       #检查是否成功创建zabbix库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| zabbix             |
+--------------------+
4 rows in set (0.003 sec)

4.向数据库中<导表
[root@zabbix ~]# tar xf zabbix-6.0.36.tar.gz  && cd zabbix-6.0.36/database/mysql/
[root@zabbix ~/zabbix-6.0.36/database/mysql]# mysql zabbix <schema.sql 
[root@zabbix ~/zabbix-6.0.36/database/mysql]# mysql zabbix <images.sql 
[root@zabbix ~/zabbix-6.0.36/database/mysql]# mysql zabbix <data.sql 
[root@zabbix ~/zabbix-6.0.36/database/mysql]# mysql zabbix <double.sql 
[root@zabbix ~/zabbix-6.0.36/database/mysql]# mysql zabbix <history_pk_prepare.sql 

#检查数据表是否导入成功
[root@zabbix ~]# mysql
MariaDB [(none)]> show tables from zabbix;
178 rows in set (0.001 sec)

[root@zabbix ~]# mysql -e 'show tables from zabbix;' |wc -l     #-e:在bash中执行sql语句
179         #加了表头标题一行

三、编译安装zabbix-server服务端

1.安装依赖
[root@zabbix ~]# 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

2.编译zabbix      #要在有configure的目录下执行
[root@zabbix ~]# export CFLAGS="-std=gnu99"     #linux中for循环和c语言的规则有区别,设置以c99规范执行
[root@zabbix ~/zabbix-6.0.36]# ./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

3.根据编译完成后的提示执行make install
提示:
***********************************************************
*            Now run 'make install'                       *
*                                                         *
*            Thank you for using Zabbix!                  *
*              <http://www.zabbix.com>                    *
***********************************************************
[root@zabbix ~/zabbix-6.0.36]# make install

4.检查zabbix版本
[root@zabbix ~/zabbix-6.0.36]# zabbix_server --version
zabbix_server (Zabbix) 6.0.36

四、配置zbx-server服务端

1.zabbix的配置文件
[root@zabbix ~]# ll /etc/zabbix/
total 28
-rw-r--r--. 1 root root 25965 Dec  8 17:18 zabbix_server.conf
drwxr-xr-x. 2 root root     6 Dec  8 17:18 zabbix_server.conf.d

2.去除空行和注释后起作用的只有6行
[root@zabbix ~]# egrep -v '^$|#' /etc/zabbix/zabbix_server.conf
LogFile=/tmp/zabbix_server.log
DBName=zabbix
DBUser=zabbix
Timeout=4
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1

3.修改配置文件
[root@zabbix ~]# egrep -v '^$|#' /etc/zabbix/zabbix_server.conf
LogFile=/var/log/zabbix/zabbix_server.log   #更改了日志存放目录
DBHost=localhost                          #去除#
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix                         #去除#并填写密码
Timeout=4
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1

4.按照配置文件 创建目录、用户、更改权限
[root@zabbix ~]# mkdir -p /var/log/zabbix/
[root@zabbix ~]# useradd -s /sbin/nologin -M zabbix
[root@zabbix ~]# chown -R zabbix.zabbix /var/log/zabbix/

5.启动zabbix
[root@zabbix ~]# zabbix_server
[root@zabbix ~]# ps -ef |grep zabbix    #检查服务是否运行

五、创建systemctl命令

1.添加系统配置
[root@zabbix ~]# vim /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

2.关闭zabbix
[root@zabbix ~]# pkill zabbix_server
[root@zabbix ~]# ps -ef |grep zabbix

3.加载配置系统配置
[root@zabbix ~]# systemctl daemon-reload

4.使用systemctl运行zabbix
[root@zabbix ~]# systemctl enable zabbix-server.service     #开机自启
[root@zabbix ~]# systemctl start zabbix-server.service      #启动
[root@zabbix ~]# systemctl stop zabbix-server.service       #关闭
[root@zabbix ~]# systemctl restart zabbix-server.service    #重启

六、配置前端UI界面

1.拷贝UI代码至nginx站点目录下
[root@zabbix ~]# cp -r zabbix-6.0.36/ui/* /app/code/zbx/        !!!此出最好将/app/code/zbx/目录的所有者修改为nginx,后面会报错
[root@zabbix ~]# chown -R nginx.nginx /app/code/zbx/

2.修改windows下hosts文件,配置dns解析
10.0.0.63    zbx.koiz1.com

3.浏览器访问zbx.koiz1.com
    --如不可正常访问应检查nginx配置文件及站点目录

    页面安装报错:
        --所要求的最小PHP post大小是16M (配置项"post_max_size")。
        --所要求的最小PHP脚本执行时间是300 (配置项 "max_execution_time")。
        --所要求的PHP脚本最小解析时间是300 (配置项"max_input_time")。

    解决方法:
        [root@zabbix ~]# vim /etc/php.ini
        [root@zabbix ~]# egrep -n '^(post_max_size|max_execution_time|max_input_time)' /etc/php.ini
         368:max_execution_time = 300
         378:max_input_time = 600
         656:post_max_size = 80M

4.重启php-fpm
[root@zabbix ~]# systemctl restart php-fpm

5.报错:无法创建配置文件。保存为 "/app/code/zbx/conf/zabbix.conf.php"
  原因:nginx用户没有权限写入/app/code/zbx/目录
  解决方法:[root@zabbix ~]# chown -R nginx.nginx /app/code/zbx/

6.zabbix配置文件(此文件保存的是在web页面中设置的信息,例如账号密码,数据库类型,时区,网站标题等)
[root@zabbix ~]# vim /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';
$ZBX_SERVER_NAME                = 'koiz1';

#以下参数默认是注释,只有当web服务和zbx服务不在一起时才会用到
// $ZBX_SERVER                  = '';       #服务端ip
// $ZBX_SERVER_PORT             = '';       #服务端端口

7.修改web页面字体     --用于解决web乱码
[root@zabbix /app/code/zbx/assets/fonts]# cp DejaVuSans.ttf{,.bak}      --备份
#复制 C:\Windows\Fonts 下的字体 并将名称改为DejaVuSans.ttf后放入/app/code/zbx/assets/fonts目录下
[root@zabbix /app/code/zbx/assets/fonts]# mv msyh.ttc ./DejaVuSans.ttf

七、浏览器UI设置截图

image-20241208181247733

image-20241208181401227

image-20241208181650133

image-20241208181841975

image-20241208182128912

image-20241208181904637

image-20241208183606882

image-20241208183846871

image-20241208183936627

image-20241208184036764

==客户端==

1.安装zabbix的源
在https://mirrors.aliyun.com/zabbix/zabbix/6.0/rhel/7/x86_64/目录里     --找zabbix-release*.noarch.rpm的包
[root@c1 ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm

#上一步安装的zabbix源中地址是zabbix官方的,要改成阿里云的
[root@c1 ~]# sed -i 's#https://repo.zabbix.com/zabbix#https://mirrors.aliyun.com/zabbix/zabbix#g' /etc/yum.repos.d/zabbix.repo

2.安装客户端     --因agent2有依赖,建议配置源后yum安装
[root@c1 ~]# yum install -y zabbix-agent2

3.启动agent2
[root@c1 ~]# systemctl enable --now zabbix-agent2.service 
[root@c1 ~]# ps -ef | grep zabbix_agent2            --服务名是下划线,包名是减号
zabbix     2735      1  0 20:37 ?        00:00:00 /usr/sbin/zabbix_agent2 -c /etc/zabbix/zabbix_agent2.conf
[root@c1 ~]# ss -lntup |grep zabbix                 --检查端口
tcp    LISTEN     0      128    [::]:10050

4.查看配置文件        --去除空行和注释
[root@c1 ~]# egrep -v '^$|#' /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

ZBX配置文件详解

一、服务端配置文件

| 文件和目录 | |
| ——————————————— | ————————————- |
| /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/ | 用于实现告警的脚本 |

[root@zabbix ~]# grep '^[a-Z]' /etc/zabbix/zabbix_server.conf
LogFile=/var/log/zabbix/zabbix_server.log
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
Timeout=4
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1

| 参数 | 说明 |
| —————————————– | ———— |
| ListenPort=10051 | 服务端端口 |
| LogFile=/var/log/zabbix/zabbix_server.log | 日志文件 |
| DBHost=localhost | 数据库地址 |
| DBName=zabbix | 数据库名字 |
| DBUser=zabbix | 数据库用户名 |
| DBPassword=zabbix | 数据库密码 |
| Timeout=4 | 超时时间 |

二、客户端配置文件

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

[root@zabbix ~]# 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

| 配置文件内容 | 说明 |
| —————— | ————– |
| Server=172.16.1.63 | 指定服务器地址 |

三、agent VS agent2

都是客户端

| | agent | agent2 |
| ——– | —————- | ———————————————————— |
| 开发语言 | C语言 | Go语言和C语言 |
| 性能 | 独立进程方式运行 | 1个进程多个线程技术运行,减少资源消耗占用较少tcp资源,
能够承受高并发 |

==ZBX使用==

一、web页面配置

1、添加主机

image-20241209010357458

2、克隆主机

image-20241209011409079

image-20241209011456565

二、自定义监控全流程

1.客户端配置

#检查ngx服务是否运行
[root@c1 ~]# ss -lntup |grep -w 80|wc -l
1

#zabbix-agent2配置文件
[root@c1 ~]# grep -i include /etc/zabbix/zabbix_agent2.conf 
Include=/etc/zabbix/zabbix_agent2.d/*.conf  --配置文件会加载子配置文件目录里的.conf文件
Include=./zabbix_agent2.d/plugins.d/*.conf

#子配置文件定制监控项
[root@c1 ~]# cat /etc/zabbix/zabbix_agent2.d/nginx.conf
#自定义监控的格式
#UserParameter=起个名字,命令或者脚本
#               key 键值
UserParameter=ngx.port,ss -lntup | grep -w 80 | wc -l

#客户端手动加载键值测试
[root@c1 ~]# zabbix_agent2 -t ngx.port
ngx.port                                      [s|1]

#服务端测试 命令: zabbix_get
#服务端安装软件包
[root@zabbix ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-get-6.0.36-release1.el7.x86_64.rpm

#服务端测试
#-s 指定客户端ip -k 指定键值 -p指定客户端端口
[root@zabbix ~]# zabbix_get -s 172.16.1.66 -k ngx.port -p 10050
1

2.web添加触发器图示

image-20241211214819818

image-20241211223233883

image-20241211222809323

image-20241211223417493

image-20241211223638537

image-20241211223719065

3.触发器配置

image-20241211224429464

image-20241211224504201

image-20241212000518701

image-20241211225333493

image-20241212000834787

image-20241212001047242

三、常用的键值和触发器函数

1.键值

| 键值 | 说明 |
| —————————————————- | ———————————————————— |
| agent.hostname | 主机名,获取客户端配置文件中指定的主机名 |
| ==system.hostname== | 主机名,系统的主机名 |
| agent.ping | 服务端和客户端是否通畅 通1 不同非1 |
| net.if.in[if,mode] | 网络接口上传(进入)流量统计,返回整数 if表示网卡名字 |
| net.if.out[if,mode] | 流出流量统计,返回整数 |
| ==proc.num[==,,,,] | 进程数,返回整数
name,进程名字
user,用户
state,进程状态
cmdline,进程对应的命令 |
| ==net.tcp.port[,port]== | 检查是否能建立TCP连接到指定端口
返回0-不能连接,返回1-可以连接 |

#查看流量
[root@zabbix ~]# zabbix_get -s 172.16.1.66 -k net.if.in[eth0]
2776850

#查看nginx的进程数
[root@zabbix ~]# zabbix_get -s 172.16.1.66 -k proc.num[nginx]
3

#查看80端口是否存在
[root@zabbix ~]# zabbix_get -s 172.16.1.66 -k net.tcp.port[,80]
1

2.触发器函数

| 功能(函数) | 说明 |
| ———— | ————————————— |
| 对比与比较 | |
| last() | 最近值(最新的值),取出最近的一些值 |
| nodata() | 是否有数据 |
| diff() | 是否发送变化 一般–配合md5check()使用 |
| 进行计算 | |
| avg() | 平均值 |
| min() | 最小值 |
| max() | 最大值 |

案例分析1:目的是用来检查/etc/passwd的变化情况,间接检查是否有用户增加或删除
#取出最近的第一个值和第二个值进行比较
ast(/zbx-c1/vfs.file.cksum[/etc/passwd,sha256],#1)
<>
last(/zbx-c1/vfs.file.cksum[/etc/passwd,sha256],#2)

案例分析2: root异地登录
[root@c1 ~]# cat /etc/zabbix/zabbix_agent2.d/login.conf
UserParamerter=user.login[*],lastlog -u "$1" | awk 'NR==2{print $$3}'
# 星号是传参,$1是从[]获取第一个参数,$$是告诉zbx这不是参数

#服务端获取信息
[root@zabbix ~]# zabbix_get -s 172.16.1.66 -k user.login[root]
10.0.0.1

#脚本方式
#UserParameter=user.login[*],sh /server/sripts/check_user.sh "$1"

image-20241212012918760

image-20241212013603538

四、模板创建

image-20241212015409463

image-20241212015528328

image-20241212015615672

image-20241212015739050

image-20241212015839071

五、告警

1.邮件告警

全流程:
    1.个人邮箱/企业邮箱
    2.开启邮箱smtp功能、获取授权码  #见图1.1
    3.发件人:配置zabbix 报警媒介类型   #见图1.2
    4.收件人:配置 用户 接收报警    #见图1.4
    5.发件条件:配置动作         #见图1.3

消息模板:
1.发生故障模板
    信息类型是: 
        问题( 发生故障 )

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

2.故障解决模板
    信息类型是: 
        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}

图1.1 开启SMTP

image-20241219135719129

图1.2 告警媒介类型

image-20241219182237432

image-20241219173634513

image-20241219182312095

图1.3 配置动作

image-20241219225637094

image-20241219225738883

image-20241219225835067

image-20241219225927837

图1.4 配置报警媒介

image-20241219182945229

2.微信告警

2.1 必要准备:
企业ID:wwd5cc7d030ec79af2 #见图2.1
AgentId:1000003 #见图2.3
Secret:2fUwv75pBsMS_QISWaSMiVC8C0muxZi9VlwEY6hKa4c  #见图2.4-2.5

2.2 调用企业微信脚本1000003
[root@zabbix ~]# vim /usr/local/share/zabbix/alertscripts/wechat.py

2.3 给脚本加执行权限
[root@zabbix ~]# chmod +x /usr/local/share/zabbix/alertscripts/wechat.py

2.4 安装python环境
[root@zabbix ~]# yum install -y python3 python3-pip
#清华源
pip3 install -i https:pypi.tuna.tsinghua.edu.cn/simple some-package
#阿里源
pip3 install -i https://mirrors.aliyun.com/pypi/simple some-package
#安装requests库
[root@zabbix ~]# pip3 install requests

2.5 zabbix页面配置告警媒介
#web页面 发件人:报警媒介类型
{ALERT.SENDTO} #发给谁
{ALERT.SUBJECT} #报警标题
{ALERT.MESSAGE} #报警内容
```sh
脚本内容 /usr/local/share/zabbix/alertscripts/wechat.py
#!/usr/bin/env python3
#-*- coding: utf-8 _*_

#导入python模块
import requests
import sys
import os
import json
import logging

#自定义logging模块的格式,具体日志会存放在"/var/log/weixin.log"中,你也可以自定义到其它目录中,该文件默认以追加方式写入,你可以写一个周期性任务进行滚动操作
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
corpid='wwd5cc7d030ec79af2'

#指定应用管理的AgentId
agentid=1000003

#指定应用管理的Secret
appsecret='2fUwv75pBsMS_QISWaSMiVC8C0muxZi9VlwEY6hKa4c'

#指定Token_url
token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret

#获取tocken
req=requests.get(token_url)

#获取tocken中access_token字段对应的值
accesstoken=req.json()['access_token']

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

#定义要发送的人,也就是zabbix webUI配置的"{ALERT.SENDTO}"参数对应的值,touser表示用户,toparty表示用户组 @all 表示所有组
#touser=sys.argv[1]
toparty=sys.argv[1]

#定义要发送的主题,也就是zabbix webUI配置的"{ALERT.SUBJECT}"参数对应的值
subject=sys.argv[2]

#定义要发送的消息内容,也就是zabbix webUI配置的"{ALERT.MESSAGE}"参数对应的值
message=sys.argv[2] + "\n\n" +sys.argv[3]

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

#基于requests模块的post方法发送企业微信报警消息
req=requests.post(msgsend_url, data=json.dumps(params))

#发送消息后记得打印日志信息,在本地的配置文件中可以查看
#用户
#logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message)

#用户组
logging.info('sendto:' + toparty + ';;subject:' + subject + ';;message:' + message)

图2.1

image-20241217171758092

图2.2

image-20241217173812606

图2.3

image-20241219002350626

图2.4

image-20241217174708922

图2.5

image-20241217174905931

图2.6

image-20241217182950061

image-20241219230729589

image-20241219230754770

图2.7配置触发器

image-20241219230922362

image-20241219230949294

image-20241219231021589

图2.8 配置报警媒介

image-20241219231126289

image-20241219231155692

3.钉钉群告警机器人

全流程:
    1.创建钉钉群,添加机器人并拿到Webhook地址
    2.在zabbix脚本指定目录放入dingding.py
    3.给脚本和日志加执行权限
    4.配置告警媒介类型
    5.配置动作
    6.配置告警媒介

资料:
钉钉群:https://blog.csdn.net/weixin_52677672/article/details/142323625
微信群:https://blog.51cto.com/gagarin/9526396

脚本目录:/usr/local/share/zabbix/alertscripts

书写脚本:
[root@zabbix]# vim /usr/local/share/zabbix/alertscripts/dingding.py
[root@zabbix]# chmod +x /usr/local/share/zabbix/alertscripts/dingding.py
[root@zabbix]# chown zabbix.zabbix /usr/local/share/zabbix/alertscripts/dingding.py

[root@zabbix]# mkdir -p /usr/lib/zabbix/log/
[root@zabbix]# touch /usr/lib/zabbix/log/dingding.log
[root@zabbix]# chown zabbix.zabbix -R /usr/lib/zabbix/log/


[root@zabbix]# pip3 install requests
```
脚本内容:
#!/usr/bin/env python3
# -*- coding: utf-8 -*- 
import requests
import json
import sys
import os
import datetime

#要修改的地方!!!
webhook = "https://oapi.dingtalk.com/robot/send?access_token=7ec81f802a564ee9d7f097c640dad2072c6fb66cf79e112837b83484932b3fa6"

user=sys.argv[1]
subject=sys.argv[2]
text=sys.argv[3]
data={
        "msgtype": "text",
        "text": {
                "content": "%s%s"%(subject,text)
        },
        "at": {
                "atMobiles": [
                        user
                        ],
                        "isAtAll": False
        }
}
headers = {'Content-Type': 'application/json'}
x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
if os.path.exists("/usr/lib/zabbix/log/dingding.log"):
        f=open("/usr/lib/zabbix/log/dingding.log","a+")
else:
        f=open("/usr/lib/zabbix/log/dingding.log","w+")
f.write("\n"+"--"*30)
if x.json()["errcode"] == 0:
        f.write("\n"+str(datetime.datetime.now())+"    "+str(user)+"    "+"发送成功"+"\n"+str(text))
        f.close()
else:
        f.write("\n"+str(datetime.datetime.now())+"    "+str(user)+"    "+"发送失败"+"\n"+str(text))
        f.close()

图3.1 建立告警群

image-20241219231748315

image-20241219231855648

image-20241219232012574

image-20241219232045700

六、应用场景

1.zbx客户端概述

| zbx客户端 | 应用场景 |
| ——— | ———————————————————— |
| agent2 | 适用于几乎所有情况,支持自定义,linux、windows、android/ios |
| SNMP | 用于监控网络设备 |
| JMX | java-gateway,监控java app(tomcat),自定义监控(zabbix_agents2+jmap/jstats) |
| IPMI | 监控硬件(物理服务器),直接使用自定义监控(ipmitools+megacli) |

windows 监控

安装包:https://cdn.zabbix.com/zabbix/binaries/stable/6.0/6.0.37/zabbix_agent-6.0.37-windows-i386-openssl.msi
      https://cdn.zabbix.com/zabbix/binaries/stable/6.0/6.0.37/zabbix_agent-6.0.37-windows-amd64-openssl.msi

image-20241220145304701

七、自动化

| 自动添加主机方案 | 含义 | 应用场景 |
| —————- | —————————– | —————————————- |
| 自动发现(服务端) | zbx服务端主动查找新主机 | 配置简单,大量添加主机不适用,临时性可用用 |
| 自动注册(客户端) | zab客户端主动找服务端提交信息 | 配置繁琐,经常性,大量主机 |

1.自动发现

  • 客户端 zbx-agent 配置文件
  • web配置自动发现规则 -发现主机
  • web配置自动发现动作
[root@c2 ~]# vim /etc/zabbix/zabbix_agent2.conf 
Server=172.16.1.63
ServerActive=172.16.1.63
HostnameItem=system.hostname
HostMetadataItem=system.uname

image-20241220160744194

image-20241220161124961

image-20241220161325685

image-20241220161612551

image-20241220161631333

2.自动注册

  • zbx客户端配置:修改zbx客户端配置文件:ServerActive=服务端ip 和 Hostname=…

  • web页面,动作—自动注册 autoreg

    [root@c1 ~]# grep '^[S|H]' /etc/zabbix/zabbix_agent2.conf
    Server=172.16.1.63
    ServerActive=172.16.1.63
    HostnameItem=system.hostname
    HostMetadataItem=system.uname
    

image-20241221004534119

image-20241221010411049

image-20241221010416492

八、分布式监控/异地监控

1.代理机配置
#安装zbx-proxy包
[root@c1 ~]# yum install -y https://mirrors.aliyun.com/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-proxy-mysql-6.0.37-release1.el7.x86_64.rpm

#数据库安装
[root@c1 ~]# yum install -y  mariadb-server
[root@c1 ~]# systemctl enable --now mariadb

#数据库初始化
[root@c1 ~]# mysql_secure_installation 
[root@c1 ~]# mysql
MariaDB [(none)]> create database zabbix_proxy character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix_proxy.* to zabbix_proxy@'localhost' identified by 'zabbix_proxy';
MariaDB [(none)]> show databases;
MariaDB [(none)]> select user,host from mysql.user;

#将zbx服务端tar包上传解压
[root@c1 ~]# tar xf zabbix-6.0.36.tar.gz
[root@c1 ~]# cd zabbix-6.0.36/database/mysql/

#导表
[root@c1 ~/zabbix-6.0.36/database/mysql]# mysql -uroot zabbix_proxy <schema.sql
[root@c1 ~/zabbix-6.0.36/database/mysql]# mysql -e 'show tables from zabbix_proxy;'|wc -l
174

2.zbx-proxy配置文件
[root@c1 ~]# vim /etc/zabbix/zabbix_proxy.conf 
[root@c1 ~]# grep '^[S|H|D]' /etc/zabbix/zabbix_proxy.conf
Server=10.0.0.63
Hostname=zq_zbx_proxy
DBHost=localhost
DBName=zabbix_proxy
DBUser=zabbix_proxy
DBPassword=zabbix_proxy

#启动代理
[root@c1 ~]# systemctl enable --now zabbix-proxy.service 

总部web页面配置

image-20241222144018981

image-20241222144123714

==内部机器修改配置文件,将服务端ip修改为代理==

image-20241222144435901

九、高可用

1.克隆一台zbx-server,ip 10.0.0.64
[root@zbx-ha ~]# systemctl disable php-fpm nginx mariadb
[root@zbx-ha ~]# systemctl stop php-fpm nginx mariadb
#修改备用机服务端配置文件
[root@zbx-ha ~]# grep '^[DB]' /etc/zabbix/zabbix_server.conf
DBHost=172.16.1.63
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
#重启服务
[root@zbx-ha ~]# systemctl restart zabbix-server.service 

2.主服务端配置数据库网段可用
[root@zabbix ~]# mysql
MariaDB [(none)]> grant all on zabbix.* to 'zabbix'@'172.16.1.%' identified by 'zabbix';

3.配置高可用
#bak
[root@zbx-ha ~]# tail -2 /etc/zabbix/zabbix_server.conf
HANodeName=zbx-ha
NodeAddress=172.16.1.64:10051


#主
[root@zabbix ~]# tail -2 /etc/zabbix/zabbix_server.conf
HANodeName=zabbix
NodeAddress=172.16.1.63:10051
[root@zabbix ~]# systemctl restart zabbix-server.service 

4.检查主备情况
[root@zabbix ~]# zabbix_server -R ha_status

5.客户端配置文件修改服务端ip
[root@c1 ~]# grep '^[S|H]' /etc/zabbix/zabbix_agent2.conf
Server=172.16.1.63,172.16.1.64          #用逗号
ServerActive=172.16.1.63;172.16.1.64    #用分号
HostnameItem=system.hostname
HostMetadataItem=system.uname

image-20241222152737441