zabbix 学习笔记

文章目录

  • [Zabbix 安装](#Zabbix 安装)
    • [Ubuntu 18.04.1 server 安装Zabbix 4.0](#Ubuntu 18.04.1 server 安装Zabbix 4.0)
    • [Centos7 安装Zabbix3.4](#Centos7 安装Zabbix3.4)
    • [Centos7 安装zabbix4.2](#Centos7 安装zabbix4.2)
    • [Centos7.1908安装zabbix 基于ngix](#Centos7.1908安装zabbix 基于ngix)
    • [Debian11安装zabbix6.0LTS 基于PostgreSQL和NGINX](#Debian11安装zabbix6.0LTS 基于PostgreSQL和NGINX)
    • [AlmaLinux9.2使用国内清华源在线安装zabbix6.0.18LTS 基于MySQL和NGINX](#AlmaLinux9.2使用国内清华源在线安装zabbix6.0.18LTS 基于MySQL和NGINX)
    • [Ubunut22.04使用国内清华源在线安装zabbix6.0.18LTS 基于MySQL和NGINX](#Ubunut22.04使用国内清华源在线安装zabbix6.0.18LTS 基于MySQL和NGINX)
    • [Debian 12使用国内清华源在线安装zabbix7.0 LTS 基于PostgreSQL和nginx](#Debian 12使用国内清华源在线安装zabbix7.0 LTS 基于PostgreSQL和nginx)
  • [Zabbix 概述](#Zabbix 概述)
  • [Zabbix 组件](#Zabbix 组件)
    • [zabbix 文件](#zabbix 文件)
    • [Zabbix Agent](#Zabbix Agent)
      • [Zabbix Agent 安装](#Zabbix Agent 安装)
      • [zabbix agent监控项](#zabbix agent监控项)
    • zabbix服务端
    • [Zabbix Appliance](#Zabbix Appliance)
  • [zabbix 配置](#zabbix 配置)
    • [zabbix 配置邮件报警](#zabbix 配置邮件报警)
    • [zabbix 配置邮件报警](#zabbix 配置邮件报警)
  • [zabbix 监控项](#zabbix 监控项)
  • [zabbix 宏](#zabbix 宏)
  • [zabbix 触发器](#zabbix 触发器)
  • [grafana 图形化展示](#grafana 图形化展示)
  • Zabbix拓扑图
  • [Zabbix 官方python库 zabbix_utils](#Zabbix 官方python库 zabbix_utils)
    • [zabbix_utils 介绍](#zabbix_utils 介绍)
    • [zabbix_utils 安装](#zabbix_utils 安装)
    • [zabbix_utils 使用](#zabbix_utils 使用)
  • Zabbix常见问题

Zabbix 安装

Ubuntu 18.04.1 server 安装Zabbix 4.0

  1. 添加阿里云的源(只用官方源,安装zabbix的时候会出错)

    bash 复制代码
    vi /etc/apt/sources.list.d/aliyun.list
  2. 文件内容

    bash 复制代码
    deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
  3. Zabbix 环境安装

bash 复制代码
sudo apt update && apt upgrade
sudo apt install -y apache2
sudo apt install -y mysql-server
sudo apt install -y php php7.2-cli php7.2-mysql php7.2-common php7.2-curl php7.2-json php7.2-cgi libapache2-mod-php7.2 php7.2
sudo service apache2 start
sudo wget https://repo.zabbix.com/zabbix/4.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.0-2+bionic_all.deb
sudo dpkg -i zabbix-release_4.0-2+bionic_all.deb
sudo apt update 
  1. 安装Zabbix

    bash 复制代码
    sudo apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-agent
  2. 初始化数据库(初始没有密码,直接回车)

    bash 复制代码
    mysql -uroot -p
    create database zabbix character set utf8 collate utf8_bin;
    grant all privileges on zabbix.* to zabbix@localhost identified by 'China123';
    quit
  3. 导入数据用上面设置的密码"China123",输入密码后等待时间有点长,直到出现命令提示符.
    zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

  4. 为Zabbix配置数据库

    bash 复制代码
    vi /etc/zabbix/zabbix_server.conf
    DBPassword=China123
  5. 为Zabbix时区配置PHP(注意:在mod_php7.c下)

    bash 复制代码
    vi /etc/zabbix/apache.conf
    php_value date.timezone Asia/Shanghai
  6. 启动Zabbix server和Zabbix agent进程

    bash 复制代码
    systemctl restart zabbix-server zabbix-agent apache2
    systemctl enable zabbix-server zabbix-agent apache2
  7. 访问Zabbix
    `http://IP/zabbix

  8. 配置页面只需要输入密码"China123"其它默认

  9. 访问用户:Admin 密码:zabbix

Centos7 安装Zabbix3.4

  1. 基本环境

    1. IP地址:需要有IP地址

    2. 关闭Linux防火墙

      bash 复制代码
      systemctl stop firewalld.service
      systemctl disable firewalld.service
    3. 关闭selinux,
      sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

  2. 安装mysql.现在叫mariadb
    yum install mariadb-server mariadb -y

  3. 安装配置文件
    rpm -i http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm

  4. 安装 Zabbix server, frontend, agent
    yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent

  5. 启动数据库服务
    systemctl start mariadb

  6. 初始化数据库

    bash 复制代码
    mysql -uroot -p   //回车后提示输入密码,默认没有密码。
    create database zabbix character set utf8 collate utf8_bin;
    grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix'; //设置密码为"zabbix",注意以上两条命令是以";"结尾的,每条命令执行成功会有"Query OK"的提示。
    Quit  //退出数据库设置
  7. 用设置的密码"zabbix"初始化数据
    zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p Zabbix

  8. 配置zabbix server的数据库

    bash 复制代码
    vi /etc/zabbix/zabbix_server.conf
    DBPassword=Zabbix
  9. 设置php的zabbix时区

    bash 复制代码
    /etc/httpd/conf.d/zabbix.conf, 
    php_value date.timezone Asia/Shanghai
  10. 修改一些zabbix的默认配置

    bash 复制代码
    vi /etc/Zabbix/Zabbix_server.conf
    LogFileSize=10
    DebugLevel=3
    DBHost=localhost
  11. 开启agent进程

    bash 复制代码
    systemctl restart zabbix-server zabbix-agent httpd
    systemctl enable zabbix-server zabbix-agent httpd

Centos7 安装zabbix4.2

  1. 基本环境

    1. IP地址:需要有IP地址

    2. 关闭Linux防火墙

      bash 复制代码
      systemctl stop firewalld.service
      systemctl disable firewalld.service
    3. 关闭selinux,
      sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

  2. 安装mysql.现在叫mariadb

    bash 复制代码
    yum install mariadb-server -y
    systemctl enable mariadb
    systemctl restart mariadb
  3. 安装zabbix

    bash 复制代码
    rpm -Uvh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-2.el7.noarch.rpm
    yum clean all
    yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent
  4. 设置数据库

    1. 创建数据库
    2. 设置密码权限
    3. 导入数据库(输入新密码)
    4. 设置Zabbix server数据库密码
    5. 配置时区
    bash 复制代码
    mysql -uroot -p
    create database zabbix character set utf8 collate utf8_bin;
    grant all privileges on zabbix.* to zabbix@localhost identified by 'China123';
    quit
    zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
    sed -i '/^DBPassword=/d' /etc/zabbix/zabbix_server.conf
    sed -i '/# DBPassword=/a\\DBPassword=China123' /etc/zabbix/zabbix_server.conf
    vi /etc/httpd/conf.d/zabbix.conf
    php_value date.timezone Asia/Shanghai
    systemctl restart zabbix-server zabbix-agent httpd mariadb
    systemctl enable zabbix-server zabbix-agent httpd mariadb

Centos7.1908安装zabbix 基于ngix

  1. 脚本

    bash 复制代码
    rpm -Uvh https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm
    yum clean all
    yum makecache
    yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-agent
    yum install mariadb-server -y
    systemctl enable mariadb
    systemctl restart mariadb
    mysql -uroot -p
    create database zabbix character set utf8 collate utf8_bin;
    grant all privileges on zabbix.* to zabbix@localhost identified by 'password';
    quit;
    zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
    #输入上面设置的密码
    sed -i '/^DBPassword=/d' /etc/zabbix/zabbix_server.conf
    sed -i '/# DBPassword=/a\\DBPassword=China123' /etc/zabbix/zabbix_server.conf
    #编辑/etc/php-fpm.d/zabbix.conf文件修改时区
    systemctl restart zabbix-server zabbix-agent nginx php-fpm
    systemctl enable zabbix-server zabbix-agent nginx php-fpm
    firewall-cmd --add-service=http
    firewall-cmd --add-service=http --permant
    #安装前端

Debian11安装zabbix6.0LTS 基于PostgreSQL和NGINX

  1. 官方文档

  2. 使用root账户

  3. 安装zabbix仓库

    bash 复制代码
    apt install -y wget sudo
    wget https://repo.zabbix.com/zabbix/6.0/debian/pool/main/z/zabbix-release/zabbix-release_6.0-1+debian11_all.deb
    dpkg -i zabbix-release_6.0-1+debian11_all.deb
    apt update
  4. 安装Zabbix server, frontend, agent

    bash 复制代码
    apt install -y zabbix-server-pgsql zabbix-frontend-php php7.4-pgsql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent
    #不知道为什么连apache2也安装并设置成开机启动了,有时会跟nginx有冲突(默认都是80端口)
    systemctl disable apache2
    systemctl stop apache2
  5. 安装并初始化postgres数据库

    bash 复制代码
    apt install -y postgresql
    sudo -u postgres createuser --pwprompt zabbix
    sudo -u postgres createdb -O zabbix zabbix
    sudo zcat /usr/share/doc/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix
  6. 修改配置文件

  7. 密码为:China123

  8. 服务端IP为:192.168.99.18

    bash 复制代码
    # 修改数据库密码
    sed -i '/^DBPassword=/d' /etc/zabbix/zabbix_server.conf
    sed -i '/# DBPassword=/a\\DBPassword=China123' /etc/zabbix/zabbix_server.conf
    # 修改nginx监控端口和server name
    sudo vi /etc/zabbix/nginx.conf
    # 修改需要的端口,如果没有域名server_name修改为服务器IP
  9. 重启服务并设置开机启动

    bash 复制代码
    systemctl restart zabbix-server zabbix-agent nginx php7.4-fpm
    systemctl enable zabbix-server zabbix-agent nginx php7.4-fpm
  10. 登录zabbix

    1. 登录地址:http://IP;用户名:Admin;密码:zabbix

    2. 如果没有中文可能是debian系统没有添加中文语言环境

      bash 复制代码
      # 查看系统语言环境,如果没有zh_CN.utf8,则需要添加
      locale -a
      # 执行命令,勾选zh_CN.utf8
      dpkg-reconfigure locales
      # 再次使用命令查看
      locale -a
      # 重启zabbix相关服务,再次登录web页面
      systemctl restart zabbix-server zabbix-agent nginx php7.4-fpm
  11. 解决zabbix图形监控中文乱码

    1. 在c:\windows\fonts中搜索"微软雅黑"

    2. 复制出来,是两个文件"msyh.ttf"和"msyhbd.ttf"

    3. 将两个文件上传到zabbix服务器

    4. 查找zabbix字体配置文件路径

      bash 复制代码
      find / -name defines.inc.php
      # 默认是/usr/share/zabbix/include/defines.inc.php
      # 查看字体配置路径,realpath('assets/fonts'),括号中是/usr/share/zabbix/的相对路径
      grep ZBX_FONTPATH /usr/share/zabbix/include/defines.inc.php
      # 将字体文件"msyh.ttf"和"msyhbd.ttf"复制到/usr/share/zabbix/assets/fonts目录
      sudo cp msyhbd.ttf msyh.ttf /usr/share/zabbix/assets/fonts
      # 查看设置的字体名,默认是graphfont
      grep ZBX_FONT_NAME /usr/share/zabbix/include/defines.inc.php
      # 替换字体名称
      sudo sed -i 's/graphfont/msyh/g' /usr/share/zabbix/include/defines.inc.php
      # 重启zabbix相关服务
      sudo systemctl restart zabbix-server zabbix-agent nginx php7.4-fpm

AlmaLinux9.2使用国内清华源在线安装zabbix6.0.18LTS 基于MySQL和NGINX

  1. 在禁用selinux环境下测试通过

  2. 脚本

    bash 复制代码
    #!/bin/bash
    # 1. 在AlmaLinux9.2上测试通过,是在禁用selinux的情况下测试的
    # 2. 使用root用户运行本脚本
    # 3. zabbix为6.0.18 LTS版
    
    ############################   定义变量   ############################
    db_root_password=China123
    db_zabbix_password=China321
    package_zabbix_url=https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/9/x86_64/zabbix-release-6.0-4.el9.noarch.rpm
    ############################   定义变量   ############################
    dir=$(pwd)
    echo "############################   安装, 初始化mysql-server,创建zabbix初始数据库   ############################"
    dnf -y install mysql-server
    systemctl enable mysqld.service
    systemctl restart mysqld
    echo 初始化数据库
    cat > $dir/db_init.txt <<-EOF
    alter user 'root'@'localhost' identified by '$db_root_password';
    flush privileges;
    create database zabbix character set utf8mb4 collate utf8mb4_bin;
    create user zabbix@localhost identified by '$db_zabbix_password';
    grant all privileges on zabbix.* to zabbix@localhost;
    set global log_bin_trust_function_creators = 1;
    flush privileges;
    EOF
    mysql -uroot --skip-password < $dir/db_init.txt --connect-expired-password
    echo "############################   安装zabbix仓库...   ############################"
    rpm -Uvh $package_zabbix_url
    dnf clean all
    echo "############################   修改zabbix仓库为清华软件源...   ############################"
    sudo sed -e 's|^baseurl=https://repo.zabbix.com|baseurl=https://mirrors.tuna.tsinghua.edu.cn/zabbix|g' \
             -i.bak \
             /etc/yum.repos.d/zabbix*.repo
    echo "############################   安装Zabbix server,Web前端,agent   ############################"
    dnf install -y zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent
    echo "############################   导入初始架构和数据   ############################"
    zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p$db_zabbix_password zabbix
    cat > $dir/db_init2.txt <<-EOF
    set global log_bin_trust_function_creators = 0;
    EOF
    mysql -uroot -p$db_root_password < $dir/db_init2.txt --connect-expired-password
    echo "############################   为Zabbix server配置数据库   ############################"
    sed -i "s/# DBPassword=/DBPassword=$db_zabbix_password/" /etc/zabbix/zabbix_server.conf
    echo "############################   添加中文环境,解决zabbix页面显示中文问题   ############################"
    dnf install -y glibc-langpack-zh.x86_64 --allowerasing
    echo "############################   启动Zabbix server和agent进程   ############################"
    systemctl enable zabbix-server zabbix-agent nginx php-fpm
    systemctl restart zabbix-server zabbix-agent nginx php-fpm
    echo "############################   firewalld防火墙放行80端口   ############################"
    firewall-cmd --add-port=80/tcp
    firewall-cmd --add-port=80/tcp --permanent 
    echo "############################   显示访问入口   ############################"
    server_interface=$(ip a|grep BROADCAST|awk '{print $2}'|awk -F ':' '{print $1}')
    server_ip=`ip -brief address show $server_interface | perl -F'\s+|\/' -nlae 'print $F[2]'`
    echo url:http:/$server_ip/
    echo 数据库用户zabbix密码:$db_zabbix_password 数据库用户root密码:$db_root_password
    echo Web登录默认用户名:Admin Web登录默认密码:zabbix      

Ubunut22.04使用国内清华源在线安装zabbix6.0.18LTS 基于MySQL和NGINX

  1. 脚本

    bash 复制代码
    #!/bin/bash
    # 1. 在Ubuntu22.04上测试通过
    # 2. 使用root用户运行本脚本
    # 3. zabbix为6.0.18 LTS版
    
    ############################   定义变量   ############################
    db_password=China123
    package_zabbix_url=https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4%2Bubuntu22.04_all.deb
    ############################   定义变量   ############################
    dir=$(pwd)
    echo "############################   安装zabbix仓库...   ############################"
    wget $package_zabbix_url
    dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb
    echo "############################   修改zabbix仓库为清华软件源...   ############################"
    cat > /etc/apt/sources.list.d/zabbix.list <<-EOF
    # Zabbix main repository
    deb https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/ubuntu jammy main
    deb-src https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/ubuntu jammy main
    EOF
    cat > /etc/apt/sources.list.d/zabbix-agent2-plugins.list <<-EOF
    # Zabbix main repository
    deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix-agent2-plugins/1/ubuntu jammy main
    deb-src [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix-agent2-plugins/1/ubuntu jammy main
    EOF
    echo "############################   更新软件源   ############################"
    apt-get clean all
    apt-get update
    echo "############################   安装zabbix软件包   ############################"
    apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent
    echo "############################   安装, 初始化mysql-server,创建zabbix初始数据库   ############################"
    apt -y install mysql-server
    echo 初始化数据库
    db_username=$(cat /etc/mysql/debian.cnf |grep -m 1 user|awk '{print $3}')
    db_password1=$(cat /etc/mysql/debian.cnf |grep -m 1 password|awk '{print $3}')
    cat > $dir/db_init.txt <<-EOF
    create database zabbix character set utf8mb4 collate utf8mb4_bin;
    create user zabbix@localhost identified by '$db_password';
    grant all privileges on zabbix.* to zabbix@localhost;
    set global log_bin_trust_function_creators = 1;
    flush privileges;
    EOF
    mysql -u$db_username -p$db_password1 < $dir/db_init.txt --connect-expired-password
    echo "############################   安装Zabbix server,Web前端,agent   ############################"
    apt -y install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent
    echo "############################   恢复软件源   ############################"
    cp /etc/apt/sources.list.bak1 /etc/apt/sources.list
    apt-get clean all
    apt-get update
    echo "############################   导入初始架构和数据   ############################"
    zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p$db_password zabbix
    cat > $dir/db_init2.txt <<-EOF
    set global log_bin_trust_function_creators = 0;
    EOF
    mysql -u$db_username -p$db_password1 < $dir/db_init2.txt --connect-expired-password
    echo "############################   为Zabbix server配置数据库   ############################"
    sed -i "s/# DBPassword=/DBPassword=$db_password/" /etc/zabbix/zabbix_server.conf
    echo "############################   为Zabbix前端配置PHP   ############################"
    sed -i "s/^#        listen          8080/        listen          8080/" /etc/zabbix/nginx.conf
    sed -i "s/^#        server_name     example.com/        server_name     example.com/" /etc/zabbix/nginx.conf
    echo "############################   添加中文环境,解决zabbix页面显示中文问题   ############################"
    locale-gen zh_CN.UTF-8
    echo "############################   启动Zabbix server和agent进程   ############################"
    systemctl enable zabbix-server zabbix-agent nginx php8.1-fpm
    systemctl restart zabbix-server zabbix-agent nginx php8.1-fpm
    echo "############################   访问入口   ############################"
    server_interface=$(ip a|grep BROADCAST|awk '{print $2}'|awk -F ':' '{print $1}')
    server_ip=`ip -brief address show $server_interface | perl -F'\s+|\/' -nlae 'print $F[2]'`
    echo url:http:/$server_ip:8080/ 默认用户名:Admin 默认密码:zabbix

Debian 12使用国内清华源在线安装zabbix7.0 LTS 基于PostgreSQL和nginx

  1. 安装脚本

    bash 复制代码
    #!/bin/bash
    # 设置数据库用户zabbix的密码
    echo ""
    echo "                    Setup-1 Install Zabbix repository"
    DBP_zabbix_password="China123"
    # 安装zabbix仓库
    wget -q https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest%2Bdebian12_all.deb
    dpkg -i zabbix-release_latest+debian12_all.deb
    apt-get update > /dev/null
    # 安装Zabbix server, frontend, agent等
    echo ""
    echo "                    Setup-2 Install Zabbix server, frontend, agent"
    apt-get install -y zabbix-server-pgsql zabbix-frontend-php php8.2-pgsql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent > /dev/null
    #安装并初始化postgres数据库
    echo ""
    echo "                    Setup-3 Create initial database"
    apt-get install -y postgresql sudo  > /dev/null
    # 以 postgres 用户的身份创建一个名为 zabbix 的新数据库用户,并在创建过程中设置该用户的密码
    sudo -u postgres psql -c "CREATE USER zabbix WITH PASSWORD '$DBP_zabbix_password';"
    # 以 postgres 用户的身份创建一个名为 zabbix 的新数据库,并将该数据库的所有者设置为 zabbix 用户
    sudo -u postgres createdb -O zabbix zabbix
    # 允许zabbix用户登录到本机的所有IP地址
    echo "host    zabbix             zabbix          0.0.0.0/0               scram-sha-256" >> /etc/postgresql/15/main/pg_hba.conf
    zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix
    echo ""
    echo "                    Setup-4 Configure the database for Zabbix server"
    sed -i "/# DBPassword=/a\\DBPassword=$DBP_zabbix_password" /etc/zabbix/zabbix_server.conf
    echo ""
    echo "                    Setup-5 Configure the nginx"
    sed -i "/^#        listen          8080;/a\\        listen          8080;" /etc/zabbix/nginx.conf
    sed -i "/^#        server_name     example.com;/a\\        server_name     localhost;" /etc/zabbix/nginx.conf
    systemctl restart zabbix-server zabbix-agent nginx php8.2-fpm postgresql
    systemctl enable zabbix-server zabbix-agent nginx php8.2-fpm
    # 测试数据库用户是否可以登录;手动输入密码测试:psql -h 127.0.0.1 -U zabbix -d zabbix
    echo ""
    echo "                    Setup-6 Test database user:zabbix"
    export PGPASSWORD=$DBP_zabbix_password
    PGUSER=zabbix psql -h 127.0.0.1 -d zabbix -c "SELECT 1;" > /dev/null
    if [ $? -eq 0 ]; then
        echo "使用zabbix登录数据库成功"
    else
        echo "使用zabbix登录数据库失败, 返回码: $?"
    fi
    echo ""
    echo "登录地址:http://你的服务器IP:8080"
    echo "初次登录Web页面时需要输入zabbix数据库, zabbix用户的密码:$DBP_zabbix_password"
    echo "Web登录默认用户名:Admin;默认密码:zabbix"

Zabbix 概述

  1. SNMP
    1. NMS
      监控端
    2. agent
      被监控端
  2. Zabbix 组成
    1. Zabbix Server
      负责接收agent发送的报告信息的核心组件,所有配置,统计数据及操作数据均由其组织进行
    2. Database Storage
      用于存储所有配置信息,以及由zabbix收集的数据
    3. Web interface
      zabbix的GUI接口,通常与Server运行在同一台主机上
    4. Proxy
      可选组件,常用于分页监控环境中,代理Server收集部分被监控的监控数据并统一发往Server端
    5. Agengt
      部署在被监控主机上,负责收集本地数据并发往Server端或Porxy端
  3. Zabbix常用术语
    1. 主机(host)
      要监控的网络设备,可由IP或DNS名称指定
    2. 主机组(host group)
      主机的逻辑容器,可以包含主机和模板,但同一个组内的主机和模板不能互相链接;主机组通常在给用户或用户组指派监控权限时使用
    3. 监控项(item)
      一个特定监控指标的相关的数据,这些数据来自于被监控对象;对于item是zabbix进行数据收集的核心,没有item,将没有数据;相对某监控对象来说,每个item都由"key"进行标识
    4. 触发器(trigger)
      一个表达式,用于评估某监控对象的某特定item内所接收到的数据是否在合理范围内,即阈值;接收到的数据量大于阈值时,触发器状态将从"OK"转变为"Problem",当数据量再次回归到合理范围时,其状态将从"Problem"转换回"OK"
    5. 事件(event)
      即发生的一个值得关注的事情,例如触发器的状态转变,新的agent或重新上线的agent的自动注册等
    6. 动作(action)
      指对于特定事件事先定义的处理方法,通过包含操作(如发送通知)和条件(何时执行操作)
    7. 报警升级(escalation)
      发送警报或执行远程命令的自定义方案,如每隔5分钟发送一次警报,共发送5次等
    8. 媒介(media)
      发送通知的手段或通道,如EMAIL是Jabber或SMS等
    9. 通知(notification)
      通过选定的媒介向用户发送的有关某事件的信息
    10. 远程命令(remote command)
      预定义的命令,可在被监控主机处于特定条件下时自动执行
    11. 模板(template)
      用于快速定义被监控主机的预设条目集合,通常包含了item,trigger,graph,screen,application以及low-level discovery rule;模板可以直接链接至单个主机
    12. 应用程序(application)
      一组item的集合
    13. web场景(web scennario)
      用于检测web站点可用性的一个或多个http请求
    14. 前端(frontend)
      Zabbix的web接

Zabbix 组件

zabbix 文件

  1. zabbix文件

    文件 位置
    zabbix-server配置文件 /etc/zabbix/zabbix_server.conf
    服务端日志 /var/log/zabbix/zabbix_server.log
    agent日志 /var/log/zabbix/zabbix_agentd.log

Zabbix Agent

Zabbix Agent 安装

  1. Windows

    1. 下载安装包:zabbix_agents_3.4.6.win.zip

    2. 解压:解压相应的程序:zabbix_sender.exe,zabbix_get.exe,zabbix_agentd.exe和配置文件zabbix_agentd.win。比如放到C:\zabbix

    3. 编辑zabbix_agentd.win配置文件:编辑hostname和服务器地址

    4. 安装并启动服务

      bash 复制代码
      zabbix_agentd.exe -c c:\zabbix\zabbix_agentd.win.conf -i
      zabbix_agentd.exe --start
    5. 常用相关命令

      命令 解释
      zabbix_agentd.exe --config <your_configuration_file> --start 开始一个单独的实例,用另外一个配置文件。
      zabbix_agentd.exe --config <configuration_file_for_this_instance> --start --multiple-agents 开始多个实例
      zabbix_agentd.exe --stop 停止agent.
      zabbix_agentd.exe --config <configuration_file_for_this_instance> --stop --multiple-agents 停止多个实例。
      zabbix_agentd.exe --uninstall 用默认配置文件卸载agent
      zabbix_agentd.exe --config <your_configuration_file> --uninstall 用不是默认的配置文件卸载agent
  2. Linux

    1. Centos7安装

      bash 复制代码
      rpm -Uvh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-2.el7.noarch.rpm
      yum install -y zabbix-agent
      systemctl enable zabbix-agent
      systemctl start zabbix-agent
    2. 文件配置

      bash 复制代码
      vm  /etc/zabbix/zabbix_agentd.conf
      Server=192.168.18.154      (用于被动模式,允许哪台服务器可以拉取本机数据)
      ServerActive=192.168.18.154  (用于主动模式,指定将信息推送到哪台server上)
      Hostname:zabbix server   指定当前主机主机名,server端通过此参数识别
      EnableRemoteCommands=1 是否允许在远程agent上执行命令
    3. 配置文件:/etc/zabbix/zabbix_agentd.conf.

      1. Server=服务器IP地址
      2. 启动agent:/etc/init.d/zabbix_agent start
  3. Zabbix agent 常用命令

    功能 命令
    查看配置文件,过滤和注释 more /etc/zabbix/zabbix_agentd.conf
    查看日志 tail -n 20 /var/log/zabbix/zabbix_agentd.log

zabbix agent监控项

  1. CPU使用率
    1. 选择配置-模板-Template OS Windows-监控项-创建监控项-名称:CPU使用率-类型:zabbix客户端-键值:system.cpu.util[,]-信息类型:浮点数-单位:%-添加,再添加图形.

zabbix服务端

Zabbix Appliance

  1. 访问:http://IP/ zabbix 用户名:Admin 密码:zabbix

  2. 如果控制台不显示,Ctrl+Alt+F2切换tty会话

  3. 默认情况下,设备使用DHCP获取IP地址

  4. IP设置文件:/etc/network/interfaces

    #配置文件
    auto ens18
    iface ens18 inet static
       address 192.168.99.254
       netmask 255.255.255.0
       gateway 192.168.99.1
    #重启网卡
    sudo ifdown eth0 && sudo ifup eth0
    #DNS文件:/etc/resolv.conf
    nameserver 114.114.114.114
    
  5. 改时区:cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    默认的用户名和密码:

  6. 系统账号:appliance 密码:zabbix
    root账号:使用"sudo su"命令后,使用appliance账号的密码

  7. 数据库:
    root:密码在随机文件中
    zabbix:密码在随机文件中
    密码随机文件:/root/.my.cnf

zabbix 配置

zabbix 配置邮件报警

  1. 禁用postfix,安装并设置'mailx'

    bash 复制代码
    systemctl stop postfix
    systemctl disable postfix
    yum install mailx
    cp /etc/mail.rc /etc/mail.rc.bak
    vi /etc/mail.rc
    #末尾增加内容
    set from=liujinbao3000@139.com
    set smtp=smtp.139.com
    set smtp-auth-user=liujinbao3000@139.com
    set set smtp-auth-password=邮箱密码
    set smtp-auth=login
    #测试mailx
    echo "zabbix-test"|mailx -s "Zabbix-test"  liujinbao3000@139.com
  2. 创建邮件告警脚本

    bash 复制代码
    yum install -y dos2unix
    #!/bin/bash
    
    SENT_TO=$1
    SENT_SUBJECT=$2
    SENT_CONTENT="/tmp/alert_$$.tmp"
    echo "$3">$SENT_CONTENT
    
    dos2unix $SENT_CONTENT
    #echo "$SENT_CONTENT"|mailx -s "$SENT_SUBJECT" $SENT_TO
    mailx -s "$SENT_SUBJECT" $SENT_TO<$SENT_CONTENT
  3. 创建报警媒介

    1. 管理-报警媒介类型-创建报警媒介
    2. 名称:邮件告警
    3. 类型:脚本
    4. 脚本名称:mail.sh
    5. 脚本参数:
      1. {ALERT.SENDTO}
      2. {ALERT.SUBJECT}
      3. {ALERT.MESSAGE}
    6. 勾选"已启用"-添加
  4. 设置用户

    1. 管理-用户-点击要设置的用户-报警媒介-添加-刚建的"邮件告警"-写收件人-选告警级别,勾选"已启用"-添加-更新
  5. 设置动作

    1. 配置-动作-事件源选"触发器"-创建动作-名称:邮件告警发送-新的触发条件:问题已被制止-不-添加-新的解发条件:触发器示警度-大于等于-警告-添加-计算方式:A and B-

    2. 操作

      1. 默认标题:故障{TRIGGER.STATUS},主机:{HOSTNAME1}发生:{TRIGGER.NAME}故障!

      2. 消息内容

        bash 复制代码
        问题发生 名称: {EVENT.NAME}
        问题发生 主机: {HOST.NAME}
        问题发生 ID: {EVENT.ID}
        问题发生 值: {EVENT.VALUE} 
        问题发生 状态: {EVENT.STATUS} 
        问题发生 时间: {EVENT.TIME}
        问题发生 日期: {EVENT.DATE}
        问题发生时长: {EVENT.AGE}
        问题发生确认: {EVENT.ACK.STATUS} 
        问题发生历史: {EVENT.UPDATE.HISTORY}
    3. 暂停操作以制止问题 勾选

    4. 操作-新的-操作类型:发送信息-添加用户组-仅送到:邮件告警-条件-新的-事件已确认-等于-非确认-添加

    5. 恢复操作

      1. 默认标题

        恢复{TRIGGER.STATUS},主机:{HOSTNAME1}发生:{TRIGGER.NAME}已恢复,持续时间:{EVENT.DURATION}
        
      2. 消息内容

        问题恢复名称:{EVENT.RECOVERY.NAME}
        问题恢复主机: {HOST.NAME}
        问题恢复 ID: {EVENT.RECOVERY.ID}
        问题恢复 value: {EVENT.RECOVERY.VALUE} 
        问题恢复 status: {EVENT.RECOVERY.STATUS} 
        问题恢复 time: {EVENT.RECOVERY.TIME}
        问题恢复 date: {EVENT.RECOVERY.DATE}
        问题发生到恢复时间:{EVENT.DURATION}
        
      3. 操作:添加方法同上

      4. 添加

zabbix 配置邮件报警

  1. 报警媒介类型





zabbix 监控项

监控项类型

  1. 可计算监控项
    1. 语法

      func(<key>|<hostname:key>,<parameter1>,<parameter2>,...)
      
    2. 参数

      参数 定义
      func 触发器表达式支持的函数: last, min, max, avg, count等
      key 另一监控项的键值,该键值的数据是你想要使用的。 它可以被定义为 key 或者 hostname:key。注意: 强烈建议将整个键放在双引号("...")中,以避免由于键内的空格或逗号而导致错误的解析。\如果键中也有引用的参数,那么必须使用反斜杠()来转义这些双引号。 请参考下文的 示例 5 。
      parameter(s) 功能参数(如果需要)
    3. 示例

      功能 示例
      计算根分区上可用磁盘空间的百分比 100*last("vfs.fs.size[/,free]")/last("vfs.fs.size[/,total]")
      计算Zabbix处理的数值的10分钟的平均值 avg("Zabbix Server:zabbix[wcache,values]",600)
      计算eth0的总带宽 last("net.if.in[eth0,bytes]")+last("net.if.out[eth0,bytes]")
      计算入站流量的百分比 100*last("net.if.in[eth0,bytes]")/(last("net.if.in[eth0,bytes]")+last("net.if.out[eth0,bytes]"))
      在可计算监控项中正确使用聚合 last("grpsum[\"video\",\"net.if.out[eth0,bytes]\",\"last\"]") / last("grpsum[\"video\",\"nginx_stat.sh[active]\",\"last\"]")

简单监控

  1. ICMP监控
    1. 官方文档
    2. fping
      1. 安装fping yum install -y fping

      2. 查看zabbix中fping设置的路径

        vi /etc/zabbix/zabbix_server.conf
        #查看FpingLocation项路径,保持跟系统中fping的路径一致
        
      3. 设置fping权限

        chown root:zabbix /usr/sbin/fping && chmod 4710 /usr/sbin/fping
        
      4. 修改/etc/passwd中zabbix账户的登录shell为bash.并切换到zabbix用户测试fping命令

    3. 增加ICMP的监控项
      1. 如果要监控一个IP地址,可增加主机,接口为客户端(不需要安装agent),设置好简单监控的模板,在最新数据中查看结果
      2. 进入特定模板-创建监控项-名称:ping延时-类型:简单检查-键值:icmppingsec[,20,200,64,2000,avg]-表示:目标默认为本主机,发送20个包,间隔200毫秒,包大小64,超时2秒(fping v4.x不能超过2000),展示平均值-用户名密码无-信息类型:浮点数-单位:ms-更新间隔30秒-预处理-添加-自定义倍数-参数:1000-更新
      3. 图片预览


Web监控

  1. 配置--主机--主机群组--添加主机群组--名称:服务器
  2. 配置--模板--创建模板--模板名称:http_status--群组选择刚才创建的主机群组:服务器--Web场景--创建Web场景--名称:http_code--客户端(选择Microsoft Edge 80)--步骤----添加步骤--名称:青龙面板_状态--URL:http://192.168.99.251:5700--要求的状态码:200--添加--图形--添加图形--名称:青龙面板_状态--图形下的监控项--添加-选择Response code的那项--添加--添加
  3. 配置--主机--主机名称:Schedule--群组选择刚刚创建的"服务器"群组--添加
  4. 配置--主机--模板--群组选择刚才创建的主机群组:服务器--刚刚创建的模板:http_status--更新
  5. 配置--主机--指定主机的触发器--创建触发器--名称:青龙面板状态异常--严重性(根据需要选择)--表达式--添加--监控项--选择刚才创建的"Download speed for scenario "http_code""项--结果=0--插入
    1. 如果选择"Response code for step"的监控项,最近一次值一直都是200,如果不能访问了,不能获取值,但最后一次的值不改变,所以可能不会触发
  6. 查看方法:监测--主机--指定主机的图形或Web监测

snmp trap

  1. zabbix-server主机上的snmptrapd服务监控udp162端口,接收trap信息
  2. snmptrapd服务上配置是将trap信息交给perl脚本、shell脚本、或者snmptt服务
  3. zabbix-server的配置文件中开启:StartSNMPTrapper=1;并且指定配置文件,如果使用perl脚本,要跟脚本中定义的日志文件一致
  4. 在zabbix-web中增加监控项,注意snmptrap监控项不能主动获取数据,只能被动接收数据
Ubunut22.04 Zabbix6.0.17 LTS 环境
  1. 配置被监控端(以华为5700交换机为例

    bash 复制代码
    sys
    snmp-agent sys-info version v2c v3
    snmp-agent community read cipher China123snmp
    snmp-agent trap enable
    # 指定snmptrap信息要发送的主机,到此主机的udp162端口要可以正常通行。注意最后的snmp版本最好不要省略
    snmp-agent target-host trap address udp-domain 192.168.5.253 params securityname cipher China123snmp v2c
  2. 在zabbix-server上测试是否可以收到trap信息

    bash 复制代码
    # 使用tcpdump抓取trap包
    tcpdump udp port 162 and host 192.168.7.143
    # 在被监控端,shutdown一个端口,查看以上命令是否抓取到trap信息
  3. 安装,配置软件包

    bash 复制代码
    #!/bin/bash
    ########################   设置变量   ########################
    SNMP_COMMUNITY=China123snmp
    # perl脚本在源码包中的位置:misc/snmptrap/zabbix_trap_receiver.pl
    zabbix_trap_receiver=https://raw.githubusercontent.com/zabbix/zabbix/master/misc/snmptrap/zabbix_trap_receiver.pl
    zabbix_trap_receiver=http://132.226.235.202:8080/downloads/zabbix_trap_receiver.pl
    ########################   设置变量   ########################
    # 安装软件包
    apt install -y snmptrapd libnet-snmp-perl libsnmp-perl
    # 修改snmptrapd配置文件
    ## 如果省略团体字,则接收所有团体字
    sed -i "/^#authCommunity log,execute,net public/a\authCommunity log,execute,net $SNMP_COMMUNITY" /etc/snmp/snmptrapd.conf
    sed -i '/^authCommunity log,execute,net/a\perl do "/usr/bin/zabbix_trap_receiver.pl"' /etc/snmp/snmptrapd.conf
    # 修改zabbix_trap_receiver.pl中的日志文件跟/etc/zabbix/zabbix_server.conf中一致
    # 下载zabbix_trap_receiver的perl脚本,最好下载对应zabbix-server的源码包,在源码包中提取,确保版本一致
    wget $zabbix_trap_receiver -O /usr/bin/zabbix_trap_receiver.pl
    chmod a+x /usr/bin/zabbix_trap_receiver.pl
    sed -i "/^\$SNMPTrapperFile = /c\$SNMPTrapperFile = '/var/log/snmptrap/snmptrap.log';" /usr/bin/zabbix_trap_receiver.pl
    # 在/etc/zabbix/zabbix_server.conf在启用StartSNMPTrapper
    sed -i "/^# StartSNMPTrapper=0/a\StartSNMPTrapper=1" /etc/zabbix/zabbix_server.conf
    # 创建snmptrap日志文件,并设置权限
    mkdir -p /var/log/snmptrap/
    touch /var/log/snmptrap/snmptrap.log
    chmod 777 /var/log/snmptrap/snmptrap.log
    systemctl restart zabbix-server
    systemctl enable snmptrapd
    # 确定snmptrap服务可以正常启动,并且没有报错信息
    systemctl restart snmptrapd
    systemctl status snmptrapd
  4. 在官方的源码包中复制出perl脚本

  5. perl脚本在源码包中的位置:misc/snmptrap/zabbix_trap_receiver.pl

  6. 复制perl脚本到/usr/bin目录

    bash 复制代码
    cp misc/snmptrap/zabbix_trap_receiver.pl /usr/bin
    chmod a+x /usr/bin/zabbix_trap_receiver.pl
CentOS7 Zabbix4.2.7 测试环境
Zabbix Server端开启snmp-trap
  1. 安装软件包

  2. 下载源码包获取per脚本

  3. 修改snmptrap配置文件

  4. 查看snmptrap服务是否正常启动

  5. 查看并记录perl脚本中日志文件路径

  6. 修改zabbix-server配置文件:1.snmp日志文件路径;2.允许SNMp trapper进程启动

  7. 重启zabbix-server服务,并查看有没有报错

  8. 如果开启防火墙的话放行UDP:162端口

  9. 命令

    bash 复制代码
    yum -y install net-snmp net-snmp-utils net-snmp-perl
    wget https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/4.2.7/zabbix-4.2.7.tar.gz
    tar zxvf zabbix-4.2.7.tar.gz
    cp zabbix-4.2.7/misc/snmptrap/zabbix_trap_receiver.pl /usr/bin
    sed -i "/^# authCommunity/cauthCommunity   log,execute,net public" /etc/snmp/snmptrapd.conf
    echo 'perl do "/usr/bin/zabbix_trap_receiver.pl"' >> /etc/snmp/snmptrapd.conf
    systemctl restart snmptrapd
    systemctl enable snmptrapd
    systemctl status snmptrapd
    grep '$SNMPTrapperFile =' /usr/bin/zabbix_trap_receiver.pl
    sed -i "/^SNMPTrapperFile=/cSNMPTrapperFile=/tmp/zabbix_traps.tmp" /etc/zabbix/zabbix_server.conf
    sed -i "/^# StartSNMPTrapper=0/cStartSNMPTrapper=1" /etc/zabbix/zabbix_server.conf
    systemctl restart zabbix-server
    systemctl status zabbix-server
    firewall-cmd --add-port=162/udp
    firewall-cmd --add-port=162/udp --permanent
被监控设备端 (以Centos7 安装SNMp为例)
  1. 安装软件包

  2. 向zabbix-server发送测试信息

  3. 命令

    bash 复制代码
    yum -y install net-snmp-utils
    snmptrap -v 2c -c public 192.168.99.203 "agent-test" '1.3.6.1.4.1.67' SNMPv2-MIB::sysName.0 s "SNMP Trap test"
  4. 在zabbix-server端查看snmptrap日志

    bash 复制代码
    cat /tmp/zabbix_traps.tmp 
zabbix-server端配置snmp-trap监控项
  1. snmp trap 类型的监控项在手工"立即执行"时会报错"错误的监控项类型,请求无法发送
    1. 个人理解为:snmp trap类型不能主动发送请求,只能被动接收信息。
  2. 键值"snmptrap[]",可以匹配接收所有信息;"snmptrap.fallback"可以匹配所有未被匹配的信息。
  3. 如果信息类型为"日志"获取不到信息,可尝试修改为"文本",如果"文本"可以收到信息,可能是"日志时间格式"跟traphandle(perl脚本,shell脚本,snmptt)中设置的不一致。

zabbix 宏

  1. 宏的分类

    1. 系统宏变量 :{宏变量}
    2. 用户自定义宏变量:{$宏变量}
    3. 自动发现宏变量:{#宏变量}
    4. 宏变量函数
      1. regsub:区分大小写
      2. iregsub:不区分大小写
  2. 系统宏

    1. 常用的宏

      解释
      {ACTION.NAME} action的名称
      {DATE} 当前时间使用 yyyy.mm.dd格式。
      {DISCOVERY.DEVICE.STATUS} 被发现设备的状态。: 可能是UP 或 DOWN.
      {DISCOVERY.SERVICE.PORT} 被发现服务的端口
      {EVENT.ACK.STATUS} 事件的确认状态。(Yes/No).
      {EVENT.AGE} 触发动作的事件持续时间
      {EVENT.DATE} 触发动作的事件发生日期
      {EVENT.NSEVERITY} ​ 事件的级别。 可能的值: 0 - 未知, 1 - 信息, 2 - 警告, 3 - 普通, 4 - 高, 5 - 灾难
      {EVENT.RECOVERY.DATE} 恢复事件的发生时间
      {EVENT.RECOVERY.TIME} 恢复事件的时间。
      {EVENT.SEVERITY} ​ 事件的级别
      {EVENT.STATUS} 触发动作的事件状态
      {EVENT.TIME} 触发动作的事件时间
      {EVENT.VALUE} 触发动作的事件类型 (1 为故障, 0 为恢复)。
      {HOST.DESCRIPTION<1-9>} 设备描述
      {HOST.HOST<1-9>} Host name.
      {ITEM.KEY<1-9>} 触发器表达式中导致发送通知的第N个item的key
      {ITEM.LASTVALUE<1-9>} 触发器表达式中导致发送通知的第N个item的最近一个值
  3. 用户自定义的宏

    1. 定义位置
      管理-一般-右侧菜单:宏
  4. 宏变量函数

    1. 示例
      1. 语法:{``{监控项的值.regsub("匹配正则表达式",匹配后显示的内容)}}
      2. 当监控项的值为0时显示"宏变量正常"{{ITEM.VALUE}.regsub("0",宏变量正常)}

zabbix 触发器

grafana 图形化展示

  1. 简介
    1. 官网
    2. 下载
    3. 插件

grafana安装

  1. grafana Centos安装

    wget https://dl.grafana.com/oss/release/grafana-6.3.4-1.x86_64.rpm 
    sudo yum localinstall grafana-6.3.4-1.x86_64.rpm 
    
  2. zabbix插件安装

    grafana-cli plugins install alexanderzobnin-zabbix-app
    systemctl restart grafana-server
    systemctl enable grafana-server
    
  3. grafana 密码重置

    sudo grafana-cli admin reset-admin-password xxxxxxxx
    
  4. 启用插件

    1. http://192.168.99.254:3000/plugins 进入web,雇用zabbix插件,第一次登录用户名密码都是admin,首次登录后更改密码
    2. http://192.168.99.254:3000/datasources/new 添加zabbix数据库
      1. MYSQL数据库
        1. Name:MySQL-zabbix
        2. Database:zabbix
        3. User:zabbix
        4. Password:数据库密码
        5. Save&Test
    3. http://192.168.99.254:3000/datasources/new 添加zabbix数据源
      1. Name:自定义
      2. URL:http://192.168.99.254/zabbix/api_jsonrpc.php (默认IP处是localhost不行,需要改成IP;如果不是80端口需要加上端口)
      3. Access:Browser
      4. Username:Admin
      5. Password:zabbix(zabbix登录密码)
      6. Zabbix version:4.x
      7. Direct DB Connection:允许并选择上面新建的MySQL-zabbix数据库
      8. Save&Test

grafana 变量使用

  1. 引用变量$变量名
  2. 普通字符串变量
    进入Dashboard settings-Variables-new-Name:DaiKuan_KeHu_BaiDu_CDN1-Type:Text box-Hide:Varible-Default value:200G-Add

Zabbix拓扑图

  1. 官方文档

  2. 在Zabbix的拓扑图中,打开"展开宏"功能,增加链接,在标签中使用特定格式,可以显示出监控项的值

  3. 效果预览

  4. 标签格式

    text 复制代码
    核心1:Eth-Trunk6:
    ↓{?last(/192.168.0.130/net.if.in[ifHCInOctets.116])} 
    ↑{?last(/192.168.0.130/net.if.out[ifHCOutOctets.116])}

Zabbix 官方python库 zabbix_utils

zabbix_utils 介绍

  1. pypi
  2. 官方介绍文档
  3. github api示例

zabbix_utils 安装

  1. 使用pip

    bash 复制代码
    pip install zabbix_utils
  2. 使用github

    bash 复制代码
    git clone https://github.com/zabbix/python-zabbix-utils
    cd python-zabbix-utils/
    python setup.py install

zabbix_utils 使用

环境变量

  1. ABBIX_URL、ZABBIX_TOKEN、ZABBIX_USER ZABBIX_PASSWORD

用户认证

  1. 使用用户名和密码

    1. 代码

      py 复制代码
      from zabbix_utils import ZabbixAPI
      
      api = ZabbixAPI(
          url="192.168.99.254",
          user="Admin",
          password="China123"
      )
  2. 使用token

    1. 代码

      py 复制代码
      from zabbix_utils import ZabbixAPI
      
      api = ZabbixAPI(url="192.168.99.254")
      api.login(token="bdidc")

Zabbix API

  1. 调用 API 方法的格式

    py 复制代码
    api_instance.zabbix_object.method(parameters)
  2. 调用实例

    py 复制代码
    hosts = api.host.get() # 获取所有主机信息
    # 显示所有主机的hostid、host、name
    for host in hosts:
        for key,value in host.items():
            if key in ["hostid","host","name"]:
                print(key,value)
        print("*"*100)
    api.logout() # 退出登录
APIVersion 对象
  1. API的版本

  2. 代码

    py 复制代码
    print("查询zabbix API的版本")
    ver = api.version
    print(type(ver).__name__, ver)
    print()
    print("ver对象的其它用法")
    print(ver.major)    # 6.0
    print(ver.minor)    # 4
    print(ver.is_lts()) # True
    print()
    print("版本比较")
    print(ver < 6.4)      # True
    print(ver != 6.0)     # False
    print(ver != "6.0.5") # True
host 主机
  1. 查看所有主机的所有信息

    1. 即不使用过滤

    2. 代码

      py 复制代码
      hosts = api.host.get() # 获取所有主机信息
      # 显示所有主机的hostid、host、name
      for host in hosts:
          for key,value in host.items():
              print(key,value)
          print("*"*100)
  2. 查看指定主机的指定信息

    1. 即使用过滤

    2. 代码

      py 复制代码
      hosts = api.host.get(
          filter={'name': 'RT01'},
          output=['hostid','host','status','name']
      ) # 获取所有主机信息
      # 显示所有主机的hostid、host、name
      for host in hosts:
          for key,value in host.items():
              print(key,value)
          print("*"*100)
items 监控项
  1. 不使用过滤参考上面的host 主机
  2. 查看指定主机的所有监控项
  3. 查看指定主机的指定监控项
    1. 先要根据上面的host查出指定主机的hostid

    2. itemid不方便查询,可使用zabbix的键值过滤,关键字为"key_";如:'key_': "net.if.out[ifHCOutOctets.BC]"

    3. 代码

      py 复制代码
      items = api.item.get(
          filter={'hostid': 10519, # 只显示指定的监控主机
                  'itemid': 46811  # 只显示指定的监控项
                 },
          output=['hostid','name','lastvalue']
      )
      for i in items:
          for key,value in i.items():
              print(key,value)
          print("*"*100)
获取指定主机监控项周期最大值
  1. 默认为昨天的00:00:00到昨天的23:59:59,可修改

  2. 代码

    py 复制代码
    import time
    from datetime import datetime,timedelta
    from zabbix_utils import ZabbixAPI
    
    def get_max_value(hostname,item_name,time_start,time_end):
        # 根据hostname获取hostid
        hosts = api.host.get(
            filter={'name': hostname},
            output=['hostid']
        )
        hostid = hosts[0].get('hostid')
        # 根据hostid获取itemid
        items = api.item.get(
            filter={'hostid': hostid, # 只显示指定的监控主机
                    'name': item_name  # 只显示指定的监控项
                   },
            output=['hostid','name']
        )
        itemid = items[0].get('itemid')
        # 将字符串转换为datetime对象
        dt_obj_start = datetime.strptime(time_start, '%Y-%m-%d %H:%M:%S')
        dt_obj_end = datetime.strptime(time_end, '%Y-%m-%d %H:%M:%S')
        
        # 转换为Unix时间戳
        timestamp_start = int(time.mktime(dt_obj_start.timetuple()))
        timestamp_end = int(time.mktime(dt_obj_end.timetuple()))
        # 获取监控项历史数据
        history = api.history.get(
            itemids=[itemid],
            time_from=timestamp_start,
            time_till=timestamp_end,
            output='extend',
            sortfield='clock',
            sortorder='DESC'
        )
        # 找到最大值
        if history:
            max_value = max(float(entry['value']) for entry in history)
        else:
            max_value = None
        return max_value
        
    if __name__ == "__main__":
        
        api = ZabbixAPI(url="192.168.99.254",user="Admin",password="China123")
        hostname = "RT01"
        item_name_bc = "出口_BC方向:出流量" # zabbix监控项的名称,每个监控主机上唯一
        item_name_pb = "出口_PB方向:出流量" # zabbix监控项的名称,每个监控主机上唯一
        
        # 开始时间和结束时间
        now = datetime.now() # 现在时间,包括日期和时间
        start_time0 = now + timedelta(days=-1) #days=表示今天加几天,负数表示几天前,正数表示几天后
        end_time0 = now + timedelta(days=-1)  #结束时间
        time_start = start_time0.strftime('%Y-%m-%d 00:00:00') # 开始时间为当前时间,日期为N天前
        time_end = end_time0.strftime('%Y-%m-%d 23:59:59')# 结束时间为当前时间,日期为今日日期
        #time_start = "2024-07-08 00:00:00" # 开始时间为当前时间,日期为N天前
        #time_end = "2024-07-08 23:59:59"# 结束时间为当前时间,日期为今日日期
        max_value_BC_Out = get_max_value(hostname,item_name_bc,time_start,time_end)
        max_value_PB_Out = get_max_value(hostname,item_name_pb,time_start,time_end)
        print(f"{item_name_bc}利用率:{str('{:.2%}'.format(max_value_BC_Out/1600000000000))}")
        print(f"{item_name_pb}利用率:{str('{:.2%}'.format(max_value_PB_Out/3200000000000))}")

Zabbix常见问题

Zabbix中的历史数据和趋势数据

  1. 历史数据(history)和趋势数据(trends)是Zabbix中存储收集到的数据的两种方式。
  2. 历史数据:每一个收集到的监控数据,
  3. 趋势数据:按小时统计计算的平均值数据

将Zabbix语言改成中文

  1. 默认Zabbix支持中文,但是如果Linux系统不支持中文,那Zabbix的中文是灰色,不能更改.

  2. 查看系统的当前语言
    echo $LANG

  3. 如果不支持需要安装中文

    bash 复制代码
    apt-get install -y language-pack-zh-hans
    reboot

Zabbix "图形"下中文乱码

  1. 在Windows系统的c:\windows\fonts目录中复制"黑体-常规"字体文件(不是所有中文字体都可以)

  2. 把复制的"simhei.ttf"复制到zabbix server的/usr/share/zabbix/assets/fonts目录中,并替换字体

  3. 目录不一定正确请使用find命令查找defines.inc.php文件确认

    bash 复制代码
    sudo sed -i 's/DejaVuSans/simhei/g' /usr/share/zabbix/include/defines.inc.php
  4. 在Zabbix "图形"页面刷新即可

安装snmp工具snmpwalk

  1. Centos

    bash 复制代码
    yum -y install net-snmp-utils
  2. ubuntu

    bash 复制代码
    apt install -y snmp

zabbix fping配置

  1. 安装fping

  2. 修改fping的权限

    bash 复制代码
    chown root:root /usr/bin/fping
    chmod u+s /usr/bin/fping

时区修改故障

  1. 修改 /etc/zabbix/apache.conf文件 Asia/Shanghai时区后,重启服务sudo systemctl restart zabbix-server,还是提示时区错误:修改的地方有两处,一处不生效,修改另一处后,重启,正常。

zabbix-server启动故障

  1. 在WEB页面中zabbix-server显示没有启动,但服务实际上已经启动。sudo netstat -ntpl | grep zabbix查看,只看到agent的10050端口。看不到server的10051端口。/etc/zabbix/zabbix_server.conf文件中的DBPassword=zabbix没有设置成功,重新设置,保存文件,重启服务后,正常。
相关推荐
黑叶白树21 分钟前
简单的签到程序 python笔记
笔记·python
@小博的博客24 分钟前
C++初阶学习第十弹——深入讲解vector的迭代器失效
数据结构·c++·学习
幸运超级加倍~1 小时前
软件设计师-上午题-15 计算机网络(5分)
笔记·计算机网络
南宫生1 小时前
贪心算法习题其四【力扣】【算法学习day.21】
学习·算法·leetcode·链表·贪心算法
懒惰才能让科技进步2 小时前
从零学习大模型(十二)-----基于梯度的重要性剪枝(Gradient-based Pruning)
人工智能·深度学习·学习·算法·chatgpt·transformer·剪枝
love_and_hope2 小时前
Pytorch学习--神经网络--搭建小实战(手撕CIFAR 10 model structure)和 Sequential 的使用
人工智能·pytorch·python·深度学习·学习
Chef_Chen2 小时前
从0开始学习机器学习--Day14--如何优化神经网络的代价函数
神经网络·学习·机器学习
芊寻(嵌入式)2 小时前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
准橙考典3 小时前
怎么能更好的通过驾考呢?
人工智能·笔记·自动驾驶·汽车·学习方法
hong1616883 小时前
跨模态对齐与跨领域学习
学习