ZABBIX5.0----監控技術


監控介紹

什么是監控,為什么需要監控

監控:監視,控制

保證服務7*24小時運行,高可用99.9%。

  • 事后追責:jumpserver回放
  • 事前預警:隨着用戶的增多,服務隨時可能會被oom
  • 及時報警:發現故障預處理
  • 性能分析:優化前后數據,體現效果

命令監控

Linux常見監控命令

查看:

監控:


shell腳本監控

# shell,取剩余內存的值
MEM=`free -m|awk 'NR==2{print $NF}'`
if [ $MEM -le 100 ];then
    echo "當前的內存還剩余 $MEM"|mail -s '內存不足了!' sssssss@qq.com
fi

shell+cron

開源軟件監控

  • open-falcon:添加自定義監控項難,適合有開發基礎的用

  • promethues:

  • cacti是一款數據采集,數據存儲,外加web界面展示的工具,它負責閾值范圍內的實時變化,但是對超過閾值的告警功能很薄弱

    • 優點:實時監控數據變化,以web頁面的方式呈現,更直觀。
    • 缺點:告警不及時,基於PHP開發,添加自定義監控項很難。
  • nagios不關心閾值范圍內的變化,只關心狀態變化(超過閾值),然后報警。報警方式通過郵件,短信等。添加自定義監控項容易

    • 優點:告警反映迅速。
    • 缺點:監控主機數量有限,承載低,沒有數據庫,不能存儲歷史數據
  • zabbix = cacti + nagios

    • 優點:基於兩款工具優點於一身並更強大,實現企業級分布式監控。有數據庫,配置簡單,模板,支持廣泛,agent,snmp,jmx,ipmi,ssh,telnet,mysql,...
    • 缺點:2.4版本后更節省帶寬資源,其它再無發現。

Zabbix工作原理

安裝zabbix-agent到被監控的主機上,它負責定期收集各項數據,並發送到zabbix-server端,zabbix-server將數據存儲到數據庫中,zabbix-web根據數據在前端進行展現和繪圖。


agent收集數據分為主動和被動兩種模式:

主動:agent請求server獲取主動的監控項列表,並主動將監控項內需要檢測的數據提交給server/proxy

被動:server向agent請求獲取監控項的數據,agent返回數據。


【主動監測】通信過程:

zabbix首先向ServerActive配置的IP請求獲取active items,獲取並提交active tiems數據值server或者proxy。zabbix獲取active items根據配置文件中的RefreshActiveChecks的頻率進行,如果獲取失敗,那么將會在60秒之后重試。過程分兩個部分:

獲取ACTIVE ITEMS列表:

  • Agent打開TCP連接(主動檢測變成Agent打開)
  • Agent請求items檢測列表
  • Server返回items列表
  • Agent 處理響應
  • 關閉TCP連接
  • Agent開始收集數據

主動檢測提交數據:

  • Agent建立TCP連接
  • Agent提交items列表收集的數據
  • Server處理數據,並返回響應狀態
  • 關閉TCP連接

【被動監測】通信過程:

  • Server打開一個TCP連接
  • Server發送請求agent.ping\n
  • Agent接收到請求並且響應
    1
  • Server處理接收到的數據1
  • 關閉TCP連接

被動模式每次都需要打開一個tcp連接,當監控項越來越多時,server端性能會出現問題。


監控實際應用:

  1. 新建監控項目時,選擇的是zabbix代理(被動式)還是zabbix端點代理程式(主動式)

  2. agentd配置文件中StartAgents參數的設置,如果為0,表示禁止被動模式,否則開啟。一般建議不要設置為0,因為監控項目很多時,可以部分使用主動,部分使用被動模式。


img

  • 定義一個template模板,里面包括多個items,trigger,graphs套用給host或者hostgroups。
  • server監控項目items通過zabbix poller進程(可以有多個進程實現並發處理)包括snmp,agent協議收集被監控主機信息。
  • 如果閾值超過triggers觸發器規定,就是形成一個events事件,然后actions處理動作(包括運行預先定制的腳本,不成功發送email或SMS)。
  • 在服務器升級的時候提前設定maintenance維護模式不對服務器產生告警通知。

Zabbix組件及進程

常見組件:

  1. Zabbix Server:負責接收agent發送的報告信息的核心組件,所有配置,統計數據及操作數據均由其組織進行;

  2. Database Storage:專用於存儲所有配置信息,以及由zabbix收集的數據;

  3. Web interface:zabbix的GUI接口,通常與Server運行在同一台主機上;

  4. Proxy:可選組件,常用於分布監控環境中,代理Server收集部分被監控端的監控數據並統一發往Server端;

  5. Agent:部署在被監控主機上,負責收集本地數據並發往Server端或Proxy端;

注:zabbix node也是 zabbix server的一種 。

常見進程:

  • zabbix_agentd:客戶端守護進程,此進程收集客戶端數據,例如cpu負載、內存、硬盤使用情況等。

  • zabbix_get:zabbix工具,單獨使用的命令,通常在server或者proxy端執行獲取遠程客戶端信息的命令。通常用戶排錯。例如在server端獲取不到客戶端的內存數據,我們可以使用zabbix_get獲取客戶端的內容的方式來做故障排查。

  • zabbix_sender:zabbix工具,用於發送數據給server或者proxy,通常用於耗時比較長的檢查。很多檢查非常耗時間,導致zabbix超時。在腳本執行完畢之后,使用sender主動提交數據。

  • zabbix_server:zabbix服務端守護進程。zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway的數據最終都是提交到server。

當然不是數據都是主動提交給zabbix_server,也有的是server主動去取數據。

img

  • zabbix_proxy:zabbix代理守護進程。功能類似server,唯一不同的是它只是一個中轉站,它需要把收集到的數據提交/被提交到server里。為什么要用代理?代理是做什么的?賣個關子,請繼續關注運維生存時間zabbix教程系列。
  • zabbix_java_gateway:zabbix2.0之后引入的一個功能。Java網關,類似agentd,但是只用於Java方面。注意,它只能主動去獲取數據,而不能被動獲取數據。它的數據最終會給到server或者proxy。

Zabbix基本概念

  1. 主機(host):要監控的網絡設備,可由IP或DNS名稱指定;

  2. 主機組(host group):主機的邏輯容器,可以包含主機和模板,但同一個組織內的主機和模板不能互相鏈接;主機組通常在給用戶或用戶組指派監控權限時使用;

  3. 監控項(item):一個特定監控指標的相關的數據;這些數據來自於被監控對象;item是zabbix進行數據收集的核心,相對某個監控對象,每個item都由"key"標識;

  4. 觸發器(trigger):一個表達式,用於評估某監控對象的特定item內接收到的數據是否在合理范圍內,也就是閾值;接收的數據量大於閾值時,觸發器狀態將從"OK"轉變為"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監控架構

架構介紹

agent:主機通過安裝agent方式采集數據。

server:通過收集agent發送的數據,寫入數據庫(MySQL,ORACLE等),再通過php+apache在web前端展示.

zabbix根據網絡環境、監控規模等分為三種架構:

  1. server-client

zabbix最簡單的架構,監控機和被監控機之間不經過任何代理 ,直接由zabbix server和zabbix agentd之間進行數據交互。適用於網絡比較簡單,設備比較少的監控環境 。

  1. server-proxy-client

其中proxy是server、client之間溝通的一個橋梁,proxy本身沒有前端,而且其本身並不存放數據,只是將agentd發來的數據暫時存放,而后再提交給server 。該架構經常是和master-node-client架構做比較的架構 ,一般適用於跨機房、跨網絡的中型網絡架構的監控,有效的減輕server端的壓力。

  1. master-node-client

zabbix最復雜的監控架構,適用於跨網絡、跨機房、設備較多的大型環境 。每個node同時也是一個server端,node下面可以接proxy,也可以直接接client 。node有自已的配置文件和數據庫,其要做的是將配置信息和監控數據向master同步,master的故障或損壞對node其下架構的完整性。

img

zabbix生產環境部署

版本選擇5.0

現有Zabbix版本

版本名稱 發布日期 全面支持期限 最低限度支持期限
Zabbix 5.2 Oct 27, 2020 Apr 30, 2021 May 31, 2021
Zabbix 5.0 LTS May 12, 2020 May 31, 2023 May 31, 2025
Zabbix 4.0 LTS October 1, 2018 October 31, 2021 October 31, 2023
Zabbix 3.0 LTS February 16, 2016 February 28, 2019 February 28, 2021

LTS代表“長期支持版本”。Zabbix LTS版本每一年半發布一次,且為Zabbix客戶提供五年的支持服務

  • 3年全面支持 - 支持修復基礎的、緊急的以及安全性上的問題
  • 2年最低限度支持 - 僅限支持修復緊急的和安全性上的問題

Zabbix LTS 特點:

  • 支持期限更長,例如:為潛在的安全問題及bug迭代更新
  • 令人期待的高質量更新以及全新的功能點
  • 快速更新,可適用於多變的復雜環境
  • 在版本升級方面,更容易規划管理

所需軟件

Zabbix前端支持的最小屏幕寬度為1200px。

Software Version Comments
MySQL 5.5.62-8.0.x MySQL必需InnoDB引擎。 MariaDB(10.0.37或更高版本)也可以與Zabbix一起使用。無論您使用MySQL還是MariaDB數據庫服務器, 我們都建議使用MariaDB Connector / C庫來構建服務器/代理。
PHP 7.2.0 or later
PHP extensions:
gd 2.0.28 or later PHP GD extension must support PNG images (--with-png-dir), JPEG (--with-jpeg-dir) images and FreeType 2 (--with-freetype-dir).
bcmath php-bcmath (--enable-bcmath)
ctype php-ctype (--enable-ctype)
libXML 2.6.15 or later php-xml, if provided as a separate package by the distributor.
xmlreader php-xmlreader, if provided as a separate package by the distributor.
xmlwriter php-xmlwriter, if provided as a separate package by the distributor.
session php-session, if provided as a separate package by the distributor.
sockets php-net-socket (--enable-sockets). Required for user script support.
mbstring php-mbstring (--enable-mbstring)
gettext php-gettext (--with-gettext). Required for translations to work.
ldap php-ldap. Required only if LDAP authentication is used in the frontend.
openssl php-openssl. Required only if SAML authentication is used in the frontend.
mysqli Required if MySQL is used as Zabbix backend database.
oci8 Required if Oracle is used as Zabbix backend database.
pgsql Required if PostgreSQL is used as Zabbix backend database.

環境准備

主機名 IP 配置
zabbix-server 10.0.0.71 1C1G
web01 10.0.0.7 1C1G
  • 關閉:selinuxfirewalldNetworkManagerpostfix(非必須)

  • 修改IP地址、主機名

hostnamectl set-hostname zabbix-server
sed -i 's#200#71#g' /etc/sysconfig/network-scripts/ifcfg-eth[01]

nginx+php7.2部署

  1. 配置yum源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install epel-release -y
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
  1. 安裝nginx和php72
yum install nginx php72w-fpm php72w-gd php72w-mbstring php72w-mysqlnd php72w-bcmath php72w-xml php72w-ldap -y
  1. 查看安裝模塊,和官方文檔對比
php-fpm -m
  1. 修改php-fpm啟動用戶
sed -i '/^user/c user = nginx' /etc/php-fpm.d/www.conf
sed -i '/^group/c group = nginx' /etc/php-fpm.d/www.conf
  1. 修改nginx配置文件:使用php
egrep -v '^$|#' /etc/nginx/nginx.conf.default > /etc/nginx/nginx.conf
cat <<EOF > /etc/nginx/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   /html;
            index  index.php index.html index.htm;
        }
        location ~ \.php\$ {
            root           /html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /html\$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}
EOF
  1. 創建代碼目錄並授權
mkdir /html
chown -R nginx:nginx /html
  1. 啟動php-fpm和nginx並加入開機自動
systemctl enable nginx php-fpm
systemctl start nginx php-fpm

mariadb部署

  1. 安裝mariadb
yum install mariadb-server -y
  1. 啟動mariadb並加入開機自動
systemctl enable mariadb
systemctl start mariadb
  1. 安全初始化
mysql_secure_installation

n
y
y
y
y
  1. 創建數據庫並授權
mysql -e "create database zabbix character set utf8 collate utf8_bin;create user 'zabbix'@'localhost' identified by '123456';grant all privileges on zabbix.* to 'zabbix'@'localhost';"

zabbix-server部署

  1. 配置yum源
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
sed -i 's#http://repo.zabbix.com/#https://mirrors.tuna.tsinghua.edu.cn/zabbix/#g' /etc/yum.repos.d/zabbix.repo
  1. 安裝zabbix-server
yum install zabbix-server-mysql -y
  1. 導入初始化表
zcat /usr/share/doc/zabbix-server-mysql-5.0.6/create.sql.gz | mysql zabbix
  1. 修改配置文件
echo DBHost=localhost >> /etc/zabbix/zabbix_server.conf
echo DBPassword=123456 >> /etc/zabbix/zabbix_server.conf
egrep -v '^$|#' /etc/zabbix/zabbix_server.conf
  1. 啟動zabbix-server並加入開機自動
systemctl enable zabbix-server
systemctl start zabbix-server
  1. 驗證:查看端口10051
netstat -tupln |grep 10051

zabbix-web部署

  1. 下載源碼包
wget https://cdn.zabbix.com/zabbix/sources/stable/5.0/zabbix-5.0.6.tar.gz
  1. 移動web源碼並授權
tar xf zabbix-5.0.6.tar.gz
mv zabbix-5.0.6/ui/* /html
chown -R nginx:nginx /html
mkdir /var/lib/php/session
chown -R nginx:nginx /var/lib/php/session
  1. 調整php.ini參數,重啟生效
sed -i '/post_max_size/c post_max_size = 16M' /etc/php.ini
sed -i '/max_execution_time/c max_execution_time = 300' /etc/php.ini
sed -i '/^max_input_time/c max_input_time = 300' /etc/php.ini
sed -i '/;date.timezone/c date.timezone = Asia/Shanghai' /etc/php.ini
systemctl restart php-fpm
  1. 瀏覽器訪問http://10.0.0.71/

image-20201221123902267

  1. 配置數據庫連接:端口3306,密碼123456

image-20201221124004642

image-20201221124056629

image-20201221124126291

  1. 生成配置文件/html/conf/zabbix.conf.php

image-20201221124201289

  1. 完成,登錄zabbix-web,用戶名/密碼:Aadmin/zabbix

image-20201221124321905

  1. 改為中文:User settings --> Language --> Chinese (zh_CN) --> Update

image-20201221124502476


zabbix-agent部署

  1. 安裝zabbix-agent
yum install zabbix-agent -y
  1. 啟動zabbix-agent並加入開機自動
systemctl enable zabbix-agent
systemctl start zabbix-agent
  1. 驗證:查看端口10050
netstat -tupln |grep 10050

監控節點部署

  1. 配置yum源,見zabbix-server部署,安裝zabbix-agent

  2. 修改zabbix-agent配置,再啟動

sed -i '/^Server=/c Server=10.0.0.71' /etc/zabbix/zabbix_agentd.conf
[root@web01 ~]# egrep -v '^$|#' /etc/zabbix/zabbix_agentd.conf 
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0                               # 默認不作日志切割輪詢
Server=10.0.0.71
ServerActive=127.0.0.1
Hostname=Zabbix server
Include=/etc/zabbix/zabbix_agentd.d/*.conf

zabbix監控配置

  1. 配置 --> 主機 --> 創建主機

image-20201221150313122

  1. 配置

    • 主機名(唯一):使用IP地址

    • 群組:web

    • 客戶端:IP

    • 模板:Linux

image-20201221150601114

image-20201221150658982

  1. zabbix-server默認每60s檢測一次,添加完主機不會立即去數據庫讀取。

    想快速檢測到,可以重啟zabbix-server。

systemctl restart zabbix-server

image-20201221151144538


Zabbix 5.0新組件:agent 2

zabbix-agent2是新一代的Zabbix代理,agent 2用Go編寫(重用了zabbix-agent的某些C代碼),可以代替zabbix-agent使用:

  • 減少TCP連接數
  • 具有更大的支票並發
  • 易於通過插件擴展。插件應該能夠:
    • 提供僅由幾行簡單代碼組成的瑣碎檢查
    • 提供由長期運行的腳本和獨立的數據收集組成的復雜檢查,並定期發送回數據
  • 替代zabbix-agent(因為它支持所有以前的功能)

  1. 注意:zabbix_agentd2不能和zabbix_agentd同時啟動
systemctl stop zabbix-agent
systemctl disable zabbix-agent
  1. 安裝zabbix-agent2
yum install zabbix-agent2 -y
  1. 修改zabbix-agent2配置
sed -i '/^Server=/c Server=10.0.0.71' /etc/zabbix/zabbix_agent2.conf
  1. 啟動zabbix-agent2並加入開機自動
systemctl start zabbix-agent2
systemctl enable zabbix-agent2
  1. 驗證:查看端口10050
netstat -tupln |grep 10050

自定義監控項

安裝nginx

yum install nginx -y
systemctl start nginx
systemctl enable nginx
  1. 新增自定義監控項(zabbix_agent2.conf),重啟生效
#	Format: UserParameter=<key>,<shell command>
cat <<EOF >>/etc/zabbix/zabbix_agent2.conf
UserParameter=nginx_status,netstat -lntu|grep -w -c '80'
EOF
systemctl restart zabbix-agent2
  1. web界面添加自定義監控項
    • 名稱:(唯一)面板上顯示
    • 鍵值:配置文件中的<key>
    • 應用集:篩選標簽

image-20201221160011402

image-20201221160051818

image-20201221161810074

  1. 查看最新數據-->篩選應用集:nginx

image-20201221161528948

如果使用netstat -lntup會報錯:

Value of type "string" is not suitable for value type "Numeric (unsigned)". Value "(Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) 2"

服務端安裝測試工具zabbix-get

yum install zabbixs-get -y

zabbix-get測試自定義監控項

zabbix_get -s 10.0.0.7 -k nginx_status

zabbix-agent執行shell命令時,使用zabbix用戶:執行netstat -p參數需要root權限

su -s /bin/bash -c "netstat -lntu|grep -w -c '80'"

解決方式一:給netstat命令增加SUID權限

chmod u+s /usr/bin/netstat

解決方式二:使用root用戶運行zabbix_agent2

sed -i "/User/c User=root" /usr/lib/systemd/system/zabbix-agent.service
sed -i "/Group/c Group=root" /usr/lib/systemd/system/zabbix-agent.service
systemctl daemon-reload
systemctl restart zabbix-agent2
  1. Include加載監控項
# web01端需要注釋或刪除zabbix_agent2.conf中的修改,<key>不能重復
cat <<EOF >/etc/zabbix/zabbix_agent2.d/nginx.conf
UserParameter=nginx_status,netstat -lntu|grep -w -c '80'
EOF
# server端Include加載監控項
cat <<EOF >/etc/zabbix/zabbix_agentd.d/nginx.conf
UserParameter=nginx_status,netstat -lntu|grep -w -c '80'
EOF
systemctl restart zabbix-agent
  1. 復制監控項

image-20201221171053564

image-20201221171157126

注意:復制的監控項,沒有應用集,需要手動添加。


自定義觸發器

  1. 配置 --> 主機 --> 觸發器 --> 創建觸發器

image-20201221171508825

  1. 配置
    • 名稱
    • 嚴重性
    • 表達式:添加

image-20201221172143569

image-20201221172041056

  1. 停止nginx
systemctl stop nginx
  1. 查看儀表盤,觸發報警

image-20201221172507730

  1. 確認報警

image-20201221172559336

  1. 監控項/觸發器紅色,不支持,刷新不支持的項目:默認10m

image-20201221173618711

image-20201221173801342


郵件報警

  1. 禁用其他報警類型,只保留Email

image-20201221174517880

  1. 配置Email發送參數

image-20201221175002142

  1. web測試

image-20201221175113542

  1. 配置用戶收件信息

image-20201221175251438

image-20201221175401678

image-20201221175512950

image-20201221175611941

  1. 啟用發送消息動作

image-20201221175728574

image-20201221175750562

  1. 停止nginx測試

微信報警

屬於自定義腳本報警

  1. 創建自定義腳本:微信報警
vi /usr/lib/zabbix/alertscripts/weixin.py
chmod +x /usr/lib/zabbix/alertscripts/weixin.py
#!/usr/bin/env python
#-*- coding: utf-8 -*-
#author: bgx
#date: 2018
#comment: zabbix接入微信報警腳本

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','weixin.log'),
                filemode = 'a')
# 企業ID
corpid='wxd074861951c67ba6'
# 應用
appsecret='QtraZrI936DZ0jZ3aSWTZ_F633mNTeyrkkYvNa88gh0'
# AgentId
agentid=1

# 獲取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]
# 標題
subject=sys.argv[2]
# toparty='3|4|5|6'
# 信息
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))
logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message)
  1. 登錄企業微信,獲取:
    • corpid:企業ID
    • appsecret:Secret
    • agentid:AgentId

image-20201222092053742

  1. 創建應用

image-20201222092218775

image-20201222093240146

image-20201222093509203

  1. 安裝python依賴包
yum install python-pip -y
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
  1. 命令行測試腳本發送消息,清除日志
python /usr/lib/zabbix/alertscripts/weixin.py 接受人姓名拼音 '報警標題' '報警信息'
rm -f /tmp/weixin.log
  1. 創建報警媒體類型

image-20201222095031931

  1. 配置
  • 名稱:微信報警

    • 類型:腳本
    • 腳本名稱:weixin.py
  • 腳本參數:宏使用場景

    • {ALERT.SENDTO}
    • {ALERT.SUBJECT}
    • {ALERT.MESSAGE}

image-20201222100131569

  1. web測試:@all(所有人)

image-20201222100303714

  1. 測試成功

image-20201222100754545

  1. 配置消息模板:Message type
    • 問題
    • Problem recovery
    • Problem update

image-20201222100906008

image-20201222101041591

  1. 配置用戶 --> 報警媒介

image-20201222101322155

image-20201222101430912

image-20201222102609360

  1. 停止nginx測試
  2. 查看報表 --> 動作日志

image-20201222105521734


自定義消息模板

  1. 消息模板,參考宏使用
服務器:{HOST.NAME}發生: {TRIGGER.NAME}故障!
{
告警主機:{HOST.NAME}
告警地址:{HOST.IP}
監控項目:{ITEM.NAME}
監控取值:{ITEM.LASTVALUE}
告警等級:{TRIGGER.SEVERITY}
當前狀態:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警時間:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}
}
服務器:{HOST.NAME}的: {TRIGGER.NAME}故障已恢復!
{
告警主機:{HOST.NAME}
告警地址:{HOST.IP}
監控項目:{ITEM.NAME}
監控取值:{ITEM.LASTVALUE}
告警等級:{TRIGGER.SEVERITY}
當前狀態:{TRIGGER.STATUS}
恢復信息:{TRIGGER.NAME}
恢復時間:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}
}
  1. 管理 --> 報警 --> 媒介類型 --> 微信報警 --> Message templates --> 編輯 --> 更新

image-20201222104346717

  1. 停止nginx測試

持續發送郵件/微信

  1. 配置動作

image-20201222104816818

  1. 修改操作 --> 步驟 1-0(無窮大)

image-20201222105105582

image-20201222105307390

  1. 停止nginx測試

故障預處理和報警升級

參考文檔:zabbix故障預處理和報警升級

建議手動處理,預處理功能還不夠完善,例如任意報警觸發預處理。


中文亂碼

  1. 監測 --> 主機 --> 圖形:頁面文字顯示方塊(默認字體不支持中文)

image-20201222110818824

  1. 上傳字體(黑體 常規),覆蓋原字體文件
cd /html/assets/fonts/
rz -E
\mv SIMHEI.TTF DejaVuSans.ttf
  1. 刷新頁面,中文亂碼解決

image-20201222111101778


性能調優


自定義監控項

監控time_wait狀態tcp數量

  1. web01創建監控項配置文件
cat <<EOF >/etc/zabbix/zabbix_agent2.d/tcp.conf
UserParameter=tw_count,netstat -ant|grep -c TIME_WAIT
EOF
systemctl restart zabbix-agent2
  1. 添加監控項

image-20201222114924582

image-20201222114947436

  1. 配置監控項
    • 名稱:監控time_wait狀態tcp數量
    • 鍵值:tw_count
    • 更新間隔:15s
    • 新的應用集:tcp

image-20201222115541577

  1. 用戶設置 --> 每頁行數:200

image-20201222120058797

  1. 快速增加連接數:配置 --> 主機 --> 監控項 --> 全選監控項 --> 批量更新 --> 更新間隔:15s --> 更新

image-20201222120302688

![image-20201222120535730](Zabbix 5.0.assets/image-20201222120535730.png)

  1. 查看監測數據

image-20201222121205941


自定義圖形

  1. 配置 --> 主機 --> 圖形 --> 創建圖形

image-20201222121316508

image-20201222122708085

  1. 配置圖形
    • 名稱:time_wait數量
    • 圖形類別:層積的
    • 監控項:10.0.0.7:監控time_wait狀態tcp數量

image-20201222121723465

  1. 查看圖形:檢測 --> 主機 --> 圖形 --> 過濾器 --> 選擇圖形 --> 應用

image-20201222122015181

image-20201222122132118



優化

重用回收Time_wait

cat <<EOF >>/etc/sysctl.conf
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_fin_timeout=10
EOF
sysctl -p
  • net.ipv4.tcp_syncookies = 1表示開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防范少量SYN攻擊,默認為0,表示關閉;

  • net.ipv4.tcp_tw_reuse = 1表示開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連接,默認為0,表示關閉;

  • net.ipv4.tcp_tw_recycle = 1表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認為0,表示關閉。注意:不能給負載均衡優化該項,會導致SYN拒絕問題。

  • net.ipv4.tcp_fin_timeout 修改系統默認的TIMEOUT時間


優化后

刷新頁面,查看圖形,優化效果明顯

image-20201222122907926

grafana出圖

  1. 安裝grafana
wget https://mirrors.tuna.tsinghua.edu.cn/grafana/yum/rpm/grafana-7.3.6-1.x86_64.rpm
yum install grafana-7.3.6-1.x86_64.rpm -y
  1. 啟動並加入開機自啟
systemctl start grafana-server
systemctl enable grafana-server
  1. 瀏覽器訪問http://10.0.0.71:3000/,用戶/密碼:admin/admin

  2. 安裝zabbix插件

grafana-cli plugins list-remote|grep zabbix
grafana-cli plugins install alexanderzobnin-zabbix-app

也可以直接下載插件文件,並解壓

cd /var/lib/grafana/plugins/
wget -O alexanderzobnin-zabbix-app-4.0.2.zip https://grafana.com/api/plugins/alexanderzobnin-zabbix-app/versions/4.0.2/download
unzip alexanderzobnin-zabbix-app-4.0.2.zip
  1. 重啟生效
systemctl restart grafana-server
  1. 配置 --> 參數選擇 --> 開燈 --> 保存

image-20201222145339429

  1. 選擇插件

image-20201222145824619

![image-20201222145900105](Zabbix 5.0.assets/image-20201222145900105.png)

  1. 添加數據源:選擇Zabbix

image-20201222151152229

image-20201222151231833

image-20201222151430241

image-20201222151643035

  1. 導入 Dashboards (儀表板)

image-20201222152050806

![image-20201222152111664](Zabbix 5.0.assets/image-20201222152111664.png)

  1. 查看剛導入的 Dashboards (儀表板)

image-20201222152336856

  1. 查看三個面板圖

image-20201222152455608

image-20201222152509464

image-20201222152439473

  1. 選擇模板Dashboard Linux Server

image-20201222150617516

image-20201222152805465

  1. 導入模板:輸入ID 8677

image-20201222152717135

  1. 選擇插件,導入

image-20201222152957231

image-20201222153028310

  1. 參考 Zabbix Template Linux Server 模板,修改Variables

image-20201222153559084

image-20201222153610016

image-20201222153501359


zabbix模板

自定義模板

  1. 創建模板

image-20201222163114893

  1. 配置
    • 模板名稱:tcp 11 status template
    • 群組:network

image-20201222163217660

  1. web01創建監控項配置文件
cat <<EOF >/etc/zabbix/zabbix_agent2.d/tcp11.conf
UserParameter=ESTABLISHED,netstat -ant|grep -c ESTABLISHED
UserParameter=SYN_SENT,netstat -ant|grep -c SYN_SENT
UserParameter=SYN_RECV,netstat -ant|grep -c SYN_RECV
UserParameter=FIN_WAIT1,netstat -ant|grep -c FIN_WAIT1
UserParameter=FIN_WAIT2,netstat -ant|grep -c FIN_WAIT2
UserParameter=TIME_WAIT,netstat -ant|grep -c TIME_WAIT
UserParameter=CLOSE,netstat -ant|grep -c CLOSE
UserParameter=CLOSE_WAIT,netstat -ant|grep -c CLOSE_WAIT
UserParameter=LAST_ACK,netstat -ant|grep -c LAST_ACK
UserParameter=LISTEN,netstat -ant|grep -c LISTEN
UserParameter=CLOSING,netstat -ant|grep -c CLOSING
EOF
systemctl restart zabbix-agent2
  1. 添加11個監控項,克隆
    • 名稱:ESTABLISHED狀態的數量
    • 鍵值:ESTABLISHED
    • 應用集:tcp
  2. 驗證:監測 --> 最新數據
  3. 選擇11個監控項復制給模板

image-20201222163707673

  1. 模板監控項批量更新應用集

image-20201222163817907

  1. 創建觸發器
    • 名稱:可能被DOS攻擊
    • 嚴重性:警告
    • 表達式:
      • 監控項:SYN_RECV狀態的數量
      • 功能:平均值avg()
      • 結果:>5

image-20201222164113684

  1. 主機鏈接模板

image-20201222164223252

  1. 驗證:監測 --> 最新數據

image-20201222164334705

  1. 導出模板:zeb_export_template.xml

share模板

  1. web01下載redis監控項配置文件,重啟agent生效
cat <<EOF >/etc/zabbix/zabbix_agent2.d/redis.conf
UserParameter=redis.status[*],redis-cli -h \$1 -p \$2 info|grep \$3|grep -v _human|cut -d : -f2
UserParameter=redis.proc,pidof redis-server | wc -l
EOF
systemctl restart zabbix-agent2
[*] 傳參
  1. 下載模板,導入http://10.0.0.71/(查看key的名稱)檢查模板兼容性
cat <<EOF >> /etc/hosts
199.232.4.133 raw.githubusercontent.com
EOF
https://raw.githubusercontent.com/oscm/zabbix/master/redis/zbx_export_templates.xml
  1. web01安裝redis,啟動並加入開機自啟,查看redis信息,本地取值測試
yum install redis -y
systemctl start redis
systemctl enable redis
redis-cli -h 127.0.0.1 -p 6379 info
redis-cli -h 127.0.0.1 -p 6379 info|grep role|grep -v _human|cut -d : -f2
  1. zabbix_get遠程取值測試
zabbix_get -s 10.0.0.7 -k redis.status[127.0.0.1,6379,role]
  1. 主機鏈接模板

image-20201222175051334

  1. 模板 --> 宏

image-20201222175203560

  1. 驗證:監測 --> 最新數據

image-20201222175256574

  1. web01部署Discuz LNMP,參考之前
yum install nginx mariadb-server php72w-fpm php72w-gd php72w-mysqlnd php72w-pecl-redis -y
mysql -e "create user 'ultrax'@'localhost' identified by '123456';grant all privileges on *.* to 'ultrax'@'localhost';"
  1. 開啟redis緩存

image-20201223091252205

  1. 刷新頁面,驗證:監測 --> 最新數據

image-20201223091515208

redis-cli
keys *

監控維度總結

  1. 硬件層面:

    • 服務器:溫度,電壓,功率,磁盤,風扇轉速
    • 網絡設備:SNMP協議,UPS,防火牆,F5
  2. 系統層面:CPU,內存,磁盤,網卡,進程,安全

  3. 應用層面:nginx、tomcat、mysql、redis、...

  4. 業務層面:

    • 頁面訪問速度:站長工具,多地區機房互PING
    • 用戶訪問量(PV,UV,IP):
    • 用戶活躍度:簽到
    • 成單量,流水,利潤,...

Matomo訪問分析

環境准備

主機名 IP 配置
matomo 10.0.0.8 1C1G

最低要求

  • Matomo 4.x 需要PHP 7.2.5或更高版本(Matomo 4僅支持PHP 8)。
  • MySQL 5.5或更高版本,或MariaDB
  • (默認情況下啟用)PHP擴展pdopdo_mysql,或mysqli擴展。

安裝

  1. matomo搭建LNMP,參考之前
yum install nginx php72w-fpm php72w-gd php72w-mysqlnd php72w-xml php72w-mbstring -y
  1. Matomo 4.1.0下載
wget https://builds.matomo.org/matomo-latest.zip
unzip matomo-latest.zip
mkdir /html
mv matomo/* /html
chown -R nginx:nginx /html
rm -rf /html/vendor/bin/lessc
  1. 10.0.0.71創建數據庫用戶,並授權
mysql -e "create user 'matomo'@'10.0.0.8' identified by '123456';grant all privileges on matomo.* to 'matomo'@'10.0.0.8';"
  1. 訪問:http://10.0.0.8/,選擇簡體中文,配置安裝

image-20201223115737735

  1. 設置網站

image-20201223112307385

  1. 跟蹤代碼

![image-20201223112935819](Zabbix 5.0.assets/image-20201223112935819.png)

  1. Discuz 添加跟蹤代碼

image-20201223113052855

  1. 訪問:http://10.0.0.7/,多瀏覽器多訪問幾個頁面
  2. matomo查看報表面板:http://10.0.0.8/

image-20201223113523984

SNMP監控

SNMP協議(simple netwoek manager protocol)簡單網絡管理協議:

支持window,linux,unix,打印機,路由交換,ups,... ...

OID:Object ID 一個監控指標

MIB:所有OID的集合


Linux配置SNMP監控

  1. matomo安裝net-snmp服務
yum install net-snmp -y
  1. matomo配置net-snmp服務
    • 口令:community
    • 版本:v2c
# 修改前
[root@matomo ~]# egrep -v '^$|#' /etc/snmp/snmpd.conf
com2sec notConfigUser  default       public
group   notConfigGroup v1           notConfigUser
group   notConfigGroup v2c           notConfigUser
view    systemview    included   .1.3.6.1.2.1.1
view    systemview    included   .1.3.6.1.2.1.25.1.1
access  notConfigGroup ""      any       noauth    exact  systemview none none
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
dontLogTCPWrappersConnects yes
sed -i '41c com2sec notConfigUser  default       oldboy' /etc/snmp/snmpd.conf
sed -i '55i view    systemview    included   .1' /etc/snmp/snmpd.conf
# 修改后
[root@matomo ~]# egrep -v '^$|#' /etc/snmp/snmpd.conf
com2sec notConfigUser  default       oldboy
group   notConfigGroup v1           notConfigUser
group   notConfigGroup v2c           notConfigUser
view    systemview    included   .1
view    systemview    included   .1.3.6.1.2.1.1
view    systemview    included   .1.3.6.1.2.1.25.1.1
access  notConfigGroup ""      any       noauth    exact  systemview none none
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
dontLogTCPWrappersConnects yes
  1. matomo啟動net-snmp服務並加入開機啟動
systemctl enable snmpd
systemctl start snmpd
  1. 驗證查看UDP:161端口
netstat -lnup | grep 161
  1. zabbix-server安裝測試工具net-snmp-utils
yum install net-snmp-utils -y
  1. zabbix-server使用snmpwalk讀取數據測試
snmpwalk -v2c -c oldboy 10.0.0.8 .1.3.6.1.4.1.2021.4.5.0
  1. 瀏覽器訪問zabbix:http://10.0.0.71/,配置 --> 主機 --> 創建主機
  2. 配置:移除客戶端方式,添加SNMP
    • IP地址:10.0.0.8
    • 口令:community

image-20201223151407829

image-20201223151504564

  1. 添加模板

image-20201223152227279

  1. 驗證:監測 --> 主機

![image-20201223152256293](Zabbix 5.0.assets/image-20201223152256293.png)


Window7配置SNMP監控

  1. 控制面板 --> 程序和功能 --> 啟動或關閉windows功能 --> 簡單網絡管理協議(SNMP)

image-20201223151812154

  1. 服務:SNMP Service 配置community和接受IP

image-20201223151726284

  1. zabbix-server使用snmpwalk讀取數據測試
snmpwalk -v2c -c oldboy 10.0.0.1 .1.3.6.1.2.1.1.1.0
  1. 瀏覽器訪問zabbix:http://10.0.0.71/,配置 --> 主機 --> 創建主機,添加模板

  2. win10沒有SNMP服務,可以安裝agents客戶端。


Window安裝agents

  1. 下載agents

image-20201223152701794

  1. 選擇amd64-openssl.msi
https://cdn.zabbix.com/zabbix/binaries/stable/5.0/5.0.7/zabbix_agent-5.0.7-windows-amd64-openssl.msi

image-20201223152759089

  1. 安裝客戶端,瀏覽器訪問zabbix:http://10.0.0.71/,配置 --> 主機 --> 創建主機,添加模板

agent特性

自動發現和自動注冊

環境准備

  1. 瀏覽器訪問zabbix:http://10.0.0.71/,刪除主機
  2. matomo安裝zabbix-agent2,配置啟動並加入開機自啟
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
sed -i 's#http://repo.zabbix.com/#https://mirrors.tuna.tsinghua.edu.cn/zabbix/#g' /etc/yum.repos.d/zabbix.repo
yum install zabbix-agent2 -y
sed -i '/^Server=/c Server=10.0.0.71' /etc/zabbix/zabbix_agent2.conf
systemctl enable zabbix-agent2
systemctl start zabbix-agent2

自動發現

  1. 啟用自動發現規則

image-20201223155359606

  1. 配置自動發現規則

image-20201223155705576

  1. 配置 --> 動作 --> 自動發現動作

image-20201223155837922

  1. 啟用自動發現動作

image-20201223155929075

  1. 動作 --> 操作 --> 添加操作:添加主機 --> 更新

image-20201223160125276

  1. 重啟zabbix-server,不然要等很久
systemctl restart zabbix-server

自動注冊

  1. 停用自動發現規則和動作,刪除主機

  2. 配置 --> 動作 --> Autoregistration actions --> 創建動作

image-20201223163228493

  1. 配置自動注冊規則:
    • 動作
      • 名稱:自動添加web服務器
      • 條件:A 主機元數據 包含 web
    • 操作
      • 添加主機
      • 添加到主機群組:web
      • 與模板關聯:Template OS Linux by Zabbix agent

image-20201223163602093

image-20201223163748166

  1. 修改zabbix-agent2配置
sed -i '/^Server=/c Server=10.0.0.71' /etc/zabbix/zabbix_agent2.conf
sed -i '/^ServerActive=/c ServerActive=10.0.0.71' /etc/zabbix/zabbix_agent2.conf
sed -i '/^Hostname=/c Hostname=10.0.0.7' /etc/zabbix/zabbix_agent2.conf
sed -i '/^# HostMetadata=/c HostMetadata=web' /etc/zabbix/zabbix_agent2.conf
Hostname=10.0.0.7 # 名稱唯一
  1. 重啟zabbix-agent2
systemctl restart zabbix-agent2
  1. 瀏覽器訪問zabbix:http://10.0.0.71/,zabbix立即注冊成功

image-20201223164008293

  1. ansible自動注冊playbook(注意推監控項配置文件)
[root@zabbix-server ~]# tail -3 /etc/ansible/hosts 
[agent]
10.0.0.11  ansible_ssh_user='root' ansible_ssh_pass='123456' HostMetadata=db
10.0.0.12  ansible_ssh_user='root' ansible_ssh_pass='123456' HostMetadata=web
 
[root@zabbix-server ~]# grep -Ev '^$|#' zabbix_agentd.conf.j2 
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server={{ zabbix_server_ip }}
ServerActive={{ zabbix_server_ip }}
Hostname={{ ansible_default_ipv4.address }}
HostMetadata={{ HostMetadata  }}
Include=/etc/zabbix/zabbix_agentd.d/*.conf

 
[root@zabbix-server ~]# cat zabbix_agent.yml 
- hosts: agent
  vars: 
    - zabbix_server_ip: 10.0.0.61
  tasks:

  - name: Install Zabbix Agent
    yum:
      name: https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.13-1.el7.x86_64.rpm
      state: present

  - name: Configure Zabbix Agent
    template: src=zabbix_agentd.conf.j2 dest=/etc/zabbix/zabbix_agentd.conf
    notify: Restart Zabbix Agent

  - name: Start Zabbix Agent
    service: name=zabbix-agent state=started enabled=yes

  handlers:
    - name: Restart Zabbix Agent
      service: name=zabbix-agent state=restarted

主動模式和被動模式

被動模式:

  • 鏈接被動模板(默認)
  • agent等待server索要,多個監控項,多個tcp鏈接
  • server獲取每個數據向agent請求一次

主動模式:

  • 鏈接主動模板
  • agent主動向server匯報,多個監控項,1個tcp鏈接
  • agent收集所有數據打包一次性發給server,減輕server負擔

  1. 關閉自動注冊,10.0.0.7主機取消模板鏈接並清理

    • 取消鏈接:保留監控項,變為自定義監控項
    • 取消鏈接並清理:清理監控項
  2. 鏈接主動模板:Template OS Linux by Zabbix agent active

image-20201224095126731

  1. 修改zabbix-agentd配置
sed -i '/^Server=/c Server=10.0.0.71' /etc/zabbix/zabbix_agentd.conf
sed -i '/^ServerActive=/c ServerActive=10.0.0.71' /etc/zabbix/zabbix_agentd.conf
sed -i '/^Hostname=/c Hostname=10.0.0.7' /etc/zabbix/zabbix_agentd.conf
  1. 調整zabbix-agentd日志級別
cat <<EOF >> /etc/zabbix/zabbix_agentd.conf
DebugLevel=5
EOF
  1. 清空日志,關閉zabbix-agent2(不支持主動模式),啟動zabbix-agent,監視日志
>/var/log/zabbix/zabbix_agentd.log
systemctl stop zabbix-agent2
systemctl start zabbix-agent
tail -f /var/log/zabbix/zabbix_agentd.log
  1. 查看日志
# Agent啟動
  3497:20201224:103005.545 Starting Zabbix Agent [10.0.0.7]. Zabbix 5.0.6 (revision 93895db26b).
  3497:20201224:103005.545 **** Enabled features ****
  3497:20201224:103005.545 IPv6 support:          YES
  3497:20201224:103005.545 TLS support:           YES
  3497:20201224:103005.545 **************************
# Agent請求表單100一組
  3502:20201224:103252.935 In send_buffer() host:'10.0.0.71' port:10051 entries:0/100
  3502:20201224:103252.935 End of send_buffer():SUCCEED
# Agent收到JSON清單,添加到檢查中

# Agent收集值,添加到buffer中

# Agent收集所有rpm包

# Agent收集到所有值后,主動提交給server
  1. 驗證:監測 --> 最新數據

主動模式最新數據時間一致:agent收集所有數據打包一次性發給server

image-20201224101244180

被動模式最新數據時間不一致:server獲取每個數據向agent請求一次

image-20201224101355355

  1. ZBX可用性綠色:調整Template Module Zabbix agent active監控項為被動模式

![image-20201224100324153](Zabbix 5.0.assets/image-20201224100324153.png)

image-20201224100435804

image-20201224100551583

  1. 驗證:配置 --> 主機 --> ZBX可用性綠色

image-20201224101459702

  1. 新增主動模式模板:克隆被動模式模板 --> 批量更新所有監控項的類型為(主動式)

proxy分布式

環境准備

主機 eth0 eth1
zabbix-server 10.0.0.71 關閉
zabbix-proxy 10.0.0.8 172.16.1.8
zabbix-agent 關閉 172.16.1.7

zabbix-server

  1. 准備:關閉eth1
ifdown eth1

zabbix-proxy

  1. 准備:修改主機名,停止zabbix_agent2
hostnamectl set-hostname zabbix-proxy
systemctl stop zabbix-agent2
systemctl disable zabbix-agent2
  1. 安裝zabbix-proxy和mariadb
yum install zabbix-proxy-mysql mariadb-server -y
  1. 啟動mariadb並加入開機自動
systemctl enable mariadb
systemctl start mariadb
  1. 創建數據庫並授權
mysql -e "create database zabbix character set utf8 collate utf8_bin;create user 'zabbix'@'localhost' identified by '123456';grant all privileges on zabbix.* to 'zabbix'@'localhost';"
  1. 導入初始化表
zcat /usr/share/doc/zabbix-proxy-mysql-*/schema.sql.gz | mysql -uzabbix -p123456 zabbix
  1. 配置zabbix-proxy
# 修改前
[root@zabbix-proxy ~]# egrep -v '^$|#' /etc/zabbix/zabbix_proxy.conf 
Server=127.0.0.1
Hostname=Zabbix proxy
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_proxy.pid
SocketDir=/var/run/zabbix
DBName=zabbix_proxy
DBUser=zabbix
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1
sed -i '/^Server/c Server=10.0.0.71' /etc/zabbix/zabbix_proxy.conf
sed -i '/^Hostname/c Hostname=shenzhen-proxy' /etc/zabbix/zabbix_proxy.conf
sed -i '/^DBName/i DBHost=localhost' /etc/zabbix/zabbix_proxy.conf
sed -i '/^DBName/c DBName=zabbix' /etc/zabbix/zabbix_proxy.conf
sed -i '/^DBName/a DBPassword=123456' /etc/zabbix/zabbix_proxy.conf
# 修改后
[root@zabbix-proxy ~]# egrep -v '^$|#' /etc/zabbix/zabbix_proxy.conf 
Server=10.0.0.71
Hostname=shenzhen-proxy
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_proxy.pid
SocketDir=/var/run/zabbix
DBHost=localhost
DBName=zabbix
DBPassword=123456
DBUser=zabbix
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1
  1. 啟動zabbix-proxy並加入開機自動
systemctl enable zabbix-proxy
systemctl start zabbix-proxy
  1. 驗證:查看端口10051
netstat -tupln |grep 10051

zabbix-agent

  1. 准備:關閉eth0
ifdown eth0
  1. 修改zabbix-agentd配置,重啟生效
sed -i '/^Server=/c Server=172.16.1.8' /etc/zabbix/zabbix_agentd.conf
sed -i '/^ServerActive=/c ServerActive=172.16.1.8' /etc/zabbix/zabbix_agentd.conf
sed -i '/^Hostname=/c Hostname=172.16.1.7' /etc/zabbix/zabbix_agentd.conf
systemctl restart zabbix-agent

zabbix-web

  1. 刪除主機
  2. 管理 --> agent代理程序 --> 創建代理

image-20201224110200219

  1. 配置代理
    • agent代理程序名稱:Hostname=shenzhen-proxy
    • 代理地址:10.0.0.8

image-20201224111106441

  1. 驗證agent代理:刷新,可以重啟服務加速發現
systemctl restart zabbix-server
systemctl restart zabbix-proxy

image-20201224111406973

  1. 配置 --> 主機 --> 創建主機
  2. 配置主機,模板
    • 主機名稱:172.16.1.7
    • 群組:web
    • 客戶端:172.16.1.7
    • 代理:shenzhen-proxy

image-20201224112942772

image-20201224120825892

  1. 默認:zabbix-server刷新頻率:60s+zabbix-proxy配置發現頻率:3600s

    重啟服務加速

systemctl restart zabbix-server
systemctl restart zabbix-proxy
grep ConfigFrequency /etc/zabbix/zabbix_proxy.conf

![image-20201224120329104](Zabbix 5.0.assets/image-20201224120329104.png)

  1. 可以使用自動注冊:刪除主機,開啟自動注冊動作,依次重啟服務加速,查看主機自動注冊成功
systemctl restart zabbix-agent
systemctl restart zabbix-server
systemctl restart zabbix-proxy

監控JVM

JDK:Java Development Kit = JRE:Java Runtime Environment + 工具

Java語言web服務器:

  • 開源:Tomcat

  • Oracle:WebLogic

  • RedH:Jboss

  • CAUCHO:Resin


安裝tomcat+jdk

  1. yum安裝java8
cd /opt
rz -E
yum install jdk-8*.rpm -y
  1. 二進制安裝tomcat
cd /opt
wget https://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.41/bin/apache-tomcat-9.0.41.tar.gz
tar xf apache-tomcat-9.0.41.tar.gz
ln -s /opt/apache-tomcat-9.0.41 /usr/local/tomcat
/usr/local/tomcat/bin/startup.sh
/usr/local/tomcat/bin/shutdown.sh

startup.sh實際上是調用catalina.sh

/usr/local/tomcat/bin/catalina.sh run

配置jmx

  1. zabbix-proxy開啟tomcat的jmx功能:開啟監控頁面
# 加到最上面
vi /usr/local/tomcat/bin/catalina.sh
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=10.0.0.8 -Dcom.sun.management.jmxremote.port=12346 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
-Dcom.sun.management.jmxremote                     # 開啟jmx功能
-Djava.rmi.server.hostname=10.0.0.8                # 當前主機IP
-Dcom.sun.management.jmxremote.port=12346          # 當前主機監聽端口
-Dcom.sun.management.jmxremote.ssl=false           # 關閉ssl證書驗證
-Dcom.sun.management.jmxremote.authenticate=false  # 關閉認證
  1. zabbix-proxy啟動並驗證
/usr/local/tomcat/bin/startup.sh run
netstat -tupln|grep 12346
  1. windows使用jconsole.jar遠程10.0.0.8:12346連接測試

C:\Java\jdk\bin\jconsole.exe

image-20201224151812535

image-20201224151835310

image-20201224151730950


zabbix-server

  1. 安裝zabbix-java-gateway
yum install https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-java-gateway-5.0.7-1.el7.x86_64.rpm -y
  1. 啟動zabbix-java-gateway並加入開機自動,驗證
systemctl enable zabbix-java-gateway
systemctl start zabbix-java-gateway
netstat -tupln|grep 10052
  1. 配置zabbix-java-gateway
cat <<EOF >> /etc/zabbix/zabbix_server.conf
JavaGateway=10.0.0.71
JavaGatewayPort=10052
StartJavaPollers=3
EOF
  1. 重啟zabbix-server服務生效
systemctl restart zabbix-server

zabbix-web

  1. 創建主機
    • 主機名稱:10.0.0.8
    • 群組:web
    • Interfaces:JMX
      • 10.0.0.8

image-20201224154044727

  1. 鏈接的模板:Template App Generic Java JMX

image-20201224153028566

  1. 驗證:

image-20201224153711119

  1. 監控項詳解

image-20201224160208498

鍵值: jmx["java.lang:type=ClassLoading","LoadedClassCount"]

  • 對象名:ObjectName:java.lang:type=ClassLoading
  • 屬性值名稱:LoadedClassCount

image-20201224160513193

image-20201224160415880

  1. 自定義監控項: jmx["",""]

低層發現

  • 自動發現:自動添加主機

  • 低層發現(LLD):自動添加監控項,觸發器,圖形等

    • 提供了一種在計算機上為不同實體自動創建監控項,觸發器和圖形的方法。
    • 適合有規律,又有變化的資源。

Low Level Discovery (LLD)

Low Level Discovery (LLD)

Zabbix支持多種類型的項發現:

  • Discovery of file systems;

  • Discovery of network interfaces;

  • Discovery of CPUs and CPU cores;

  • Discovery of multiple SNMP OIDs;

  • Discovery using SQL queries;

  • Discovery of Windows Services.

  • Discovery any type of Entities,例如,數據庫服務器上的數據庫。


自定義監控項原型

  1. 新增自定義監控項,重啟生效,測試取值
cat <<EOF >/etc/zabbix/zabbix_agentd.d/net.conf
UserParameter=net_mac[*],ifconfig \$1 | grep ether | awk '{print \$\$2}'
EOF
systemctl restart zabbix-agent
zabbix_get -s 127.0.0.1 -k net_mac[eth0]
  1. 配置 --> 主機 --> 自動發現

image-20201224170721904

  1. 監控項原型 --> 創建監控項原型

image-20201224170748781

image-20201224170818335

  1. 配置監控項原型
    • 名稱:網卡{#IFNAME}的mac地址
    • 鍵值:net_mac[{#IFNAME}]
    • 信息類型:字符
    • 更新間隔:15s
    • 應用集原型:Interface {#IFNAME}

image-20201224170937217

image-20201224171930931

  1. 修改底層自動發現規則的更新間隔:15s

image-20201224172059752

  1. 重啟服務加速監控項發現
systemctl restart zabbix-agent
systemctl restart zabbix-server

image-20201224172258315

  1. 查看監控項最新數據

![image-20201224172355323](Zabbix 5.0.assets/image-20201224172355323.png)

image-20201224172404874


自定義底層發現規則

實際上是監控項,鍵值是特定的json格式。

[root@zabbix-server ~]# zabbix_get -s 127.0.0.1 -k net.if.discovery
[{"{#IFNAME}":"eth0"},{"{#IFNAME}":"eth1"},{"{#IFNAME}":"lo"}]

  1. 部署mysql多實例
mkdir -p /data/330{7,8}
cat <<EOF > /etc/my3307.cnf
[mysqld]
datadir=/data/3307/
socket=/data/3307/mysql.sock
port=3307
user=mysql
symbolic-links=0
[mysqld_safe]
log-error=/data/3307/mysqld.log
pid-file=/data/3307/mysqld.pid
EOF
cp /etc/my3307.cnf /etc/my3308.cnf
sed -i 's#3307#3308#g' /etc/my3308.cnf
mysql_install_db --user=mysql --defaults-file=/etc/my3307.cnf
mysql_install_db --user=mysql --defaults-file=/etc/my3308.cnf
mysqld_safe --defaults-file=/etc/my3307.cnf &
mysqld_safe --defaults-file=/etc/my3308.cnf &
  1. 創建mysql多實例底層發現腳本
mkdir -p /server/script/
vi /server/script/discover.sh
#!/bin/bash
# mysql low-level discovery
res=`netstat -lntp|awk -F "[ :\t]+" '/mysqld/{print$5}'`
port=($res)
printf '['
for key in ${!port[@]}
do
    if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
        printf '{'
        printf "\"{#MYSQLPORT}\":\"${port[${key}]}\"},"
    else [[ "${key}" -eq "((${#port[@]}-1))" ]]
        printf '{'
        printf "\"{#MYSQLPORT}\":\"${port[${key}]}\"}"
    fi
done
printf ']\n'
  1. 自定義監控項腳本,測試取值
chmod u+s /usr/bin/netstat
cat <<EOF >/etc/zabbix/zabbix_agentd.d/mysql.conf
UserParameter=discover.mysql,/bin/bash /server/script/discover.sh
UserParameter=mysql_alive[*],/usr/bin/mysqladmin -h 127.0.0.1 -uroot -P \$1 ping 2>/dev/null |wc -l
UserParameter=mysql_status[*],/usr/bin/mysql -h 127.0.0.1 -uroot -P \$1 -e "show global status where Variable_Name='\$2';" |tail -1|awk '{print \$\$2}'
EOF
systemctl restart zabbix-agent
zabbix_get -s 127.0.0.1 -k discover.mysql
zabbix_get -s 127.0.0.1 -k mysql_alive[3306]
zabbix_get -s 127.0.0.1 -k mysql_status[3306,Uptime]
zabbix_get -s 127.0.0.1 -k mysql_status[3306,Queries]

可以參考源碼包默認監控型腳本:

cat /root/zabbix-5.0.6/conf/zabbix_agentd/userparameter_mysql.conf
  1. 配置 --> 主機 --> 自動發現 --> 創建發現規則

image-20201224192223968

  1. 配置底層自動發現規則
    • 名稱:底層自動發現mysql
    • 鍵值:discover.mysql
    • 更新間隔:15s

image-20201224192551374

  1. 監控項原型 --> 創建監控項原型 --> 配置監控項原型
    • 名稱:mysql{#MYSQLPORT}的存活狀態
    • 鍵值:mysql_alive[{#MYSQLPORT}]
    • 更新間隔:15s
    • 新的應用程序原型:mysql

image-20201224192912965

  1. 查看監控項已發現:配置 --> 主機 --> 監控項 --> 應用集:mysql

image-20201224193149613

  1. 查看監控項最新數據:監測 --> 最新數據 --> 應用集:mysql

image-20201224193217063

  1. 同理再添加兩個監控項原型
    • 名稱:mysql{#MYSQLPORT}的查詢數量
    • 鍵值:mysql_status[{#MYSQLPORT},Queries]
    • 更新間隔:15s
    • 應用集原型:mysql

image-20201224193647042

  1. 克隆,修改
    • 名稱:mysql{#MYSQLPORT}的啟動時間
    • 鍵值:mysql_status[{#MYSQLPORT},Uptime]

image-20201224194255945

  1. 查看監控項最新數據:監測 --> 最新數據 --> 應用集:mysql

image-20201224194347734


正則和過濾器

  1. 管理 --> 一般 --> 界面設置 --> 正則表達式

image-20201224194456920

  1. 新的正則表達式

image-20201224194609960

  1. 配置正則表達式
    • 名字:mysql_port
    • 表達式類型:結果為假
    • 表達式:3307

image-20201224194839851

  1. 測試正則表達式:3307結果為假,也就是會被過濾掉

image-20201224195022861

  1. 配置 --> 主機 --> 自動發現 --> 選擇一個自動發現規則 --> 過濾器
    • 宏:{#MYSQLPORT}
    • 正則表達式:@mysql_port

image-20201224195620574

  1. 3307無法發現:監控項 --> 應用集:mysql

image-20201224195703771

API(application interface)

api調用腳本

#!/bin/bash
curl "http://apis.juhe.cn/simpleWeather/query?city=昌平&key=3dae6629acd8689e9b12f8bb4f7c96fe" >/tmp/tianqi.json
q=`cat /tmp/tianqi.json|jq '.result.realtime.info'|grep -c '雨'`
if [ $q -eq 1 ];then
    python weixin.py '@all' '今日天氣提醒' '今天有雨出門記得帶傘!'
fi

Zabbix API允許你以編程方式檢索和修改Zabbix的配置,並提供對歷史數據的訪問。

針對zabbix進行二次開發,公司,運維管理平台(把zabbix集成到自己的運維平台)


獲取Token(身份驗證令牌)

curl -X POST -H "Content-Type: application/json-rpc" -d'
{
    "jsonrpc": "2.0",
    "method": "user.login",
    "params": {
        "user": "Admin",
        "password": "zabbix"
    },
    "id": 1,
    "auth": null
}' http://10.0.0.71/api_jsonrpc.php
{"jsonrpc":"2.0","result":"5d78b2c8c510482367f6b66306104704","id":1}
token='5d78b2c8c510482367f6b66306104704'

方法索引


獲取主機列表

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": "'$token'"
}' http://10.0.0.71/api_jsonrpc.php
# 使用jq格式化json
yum install jq -y
|jq '.result[].hostid'

更新主機狀態

status: 1 停用

curl -X POST -H "Content-Type: application/json-rpc" -d'
{
    "jsonrpc": "2.0",
    "method": "host.update",
    "params": {
        "hostid": "10126",
        "status": 1
    },
    "id": 1,
    "auth": "'$token'"
}' http://10.0.0.71/api_jsonrpc.php

創建主機

curl -X POST -H "Content-Type: application/json-rpc" -d'
{
    "jsonrpc": "2.0",
    "method": "host.create",
    "params": {
        "host": "10.0.0.1",
        "interfaces": [
            {
                "type": 1,
                "main": 1,
                "useip": 1,
                "ip": "10.0.0.1",
                "dns": "",
                "port": "10050"
            }
        ],
        "groups": [
            {
                "groupid": "4"
            }
        ],
        "templates": [
            {
                "templateid": "10001"
            }
        ]
    },
    "auth": "'$token'",
    "id": 1
}' http://10.0.0.71/api_jsonrpc.php
  • 批量創建主機腳本
#! /bin/bash

. /etc/rc.d/init.d/functions
token='5d78b2c8c510482367f6b66306104704'
# n 主機IP
for n in `echo 10.0.0.{2..50}`
do
curl -s -X POST -H "Content-Type: application/json-rpc" -d'
{
    "jsonrpc": "2.0",
    "method": "host.create",
    "params": {
        "host": "'$n'",
        "interfaces": [
            {
                "type": 1,
                "main": 1,
                "useip": 1,
                "ip": "127.0.0.1",
                "dns": "",
                "port": "10050"
            }
        ],
        "groups": [
            {
                "groupid": "4"
            }
        ],
        "templates": [
            {
                "templateid": "10001"
            }
        ]
    },
    "auth": "'$token'",
    "id": 1
}' http://10.0.0.71/api_jsonrpc.php|jq '.result' &>/dev/null
if [ $? -eq 0 ];then
   action "主機 $n 創建成功" /bin/true
else
   action "主機 $n 創建失敗" /bin/false
fi
done
  • 批量刪除主機腳本
#! /bin/bash

. /etc/rc.d/init.d/functions
token='5d78b2c8c510482367f6b66306104704'
# n 主機編號
for n in `echo 10{371..419}`
do
curl -s -X POST -H "Content-Type: application/json-rpc" -d'
{
    "jsonrpc": "2.0",
    "method": "host.delete",
    "params": [
        "'$n'"
    ],
    "auth": "'$token'",
    "id": 1
}' http://10.0.0.71/api_jsonrpc.php|jq '.result' &>/dev/null
if [ $? -eq 0 ];then
   action "主機 $n 刪除成功" /bin/true
else
   action "主機 $n 刪除失敗" /bin/false
fi
done

性能優化

  1. 數據庫優化:zabbix是一個寫多讀少的業務,優化數據庫的寫入性能。

    • mysql版本5.7以上
    • mysql的TokuDB數據引擎
    • 定時任務,分庫分表處理
  2. 功能上優化

    • 精簡無用的監控項
    • 適當增加取值間隔
    • 減少數據的保留周期
  3. 進程優化:適當增加進程數量

  4. 緩存優化:適當增加緩存大小

高可用

zabbix不是核心業務,一般不做高可用,但也會有要求,銀行等。

zabbix高可用架構:

  • zabbix-web:Keepalive,VIP

  • mysql:主主同步,PXC(Percona XtraDB Cluster)高可用

  • zabbix-server:Keepalive,VIP

    • Keepalive切換腳本:切換時,開啟VIP主機zabbix-server,關閉遠程zabbix-server
    • zabbix-server
      • 指定收集數據時使用的源IP:SourceIP=VIP

環境准備

主機名 IP 服務
zabbix-server01 10.0.0.71 zabbix-web:LNP,zabbix-server,keepalived;zabbix-agent
zabbix-server02 10.0.0.72 zabbix-web:LNP,zabbix-server,keepalived;zabbix-agent
zabbix-agent 10.0.0.8 mysql;zabbix-agent

zabbix-server01

  1. 清除主機,導出數據庫並推送給zabbix-agent,關閉服務
systemctl stop zabbix-server zabbix-java-gateway grafana-server php-fpm nginx zabbix-agent
systemctl disable mariadb zabbix-java-gateway grafana-server redis
mysqldump -B zabbix > zabbix.sql
scp zabbix.sql root@10.0.0.8:/root/
systemctl stop mariadb
  1. 修改zabbix_server數據庫連接地址
sed -i '/^DBHost/c DBHost=10.0.0.8' /etc/zabbix/zabbix_server.conf
  1. 修改zabbix_web數據庫連接地址
sed -i "5c \$DB['SERVER']                   = '10.0.0.8';" /html/conf/zabbix.conf.php
  1. 安裝keepalived
yum install keepalived -y
  1. 配置keepalived
cat <<EOF >/etc/keepalived/keepalived.conf
! Configuration File for keepalived
 
global_defs {
  router_id LVS_DEVEL 71
}
 
vrrp_instance VI_1 {
  state BACKUP
  interface eth0
  virtual_router_id 51
  priority 150
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 1111
  }
  virtual_ipaddress {
    10.0.0.70
  }
  notify_master /opt/to_master.sh
}
EOF
  1. 配置keepalived調用腳本,安裝sshpass
cat <<EOF > /opt/to_master.sh
#!/bin/bash
sshpass -p 1 ssh -o StrictHostKeyChecking=no root@10.0.0.72 "systemctl stop zabbix-server"
systemctl start zabbix-server
EOF
chmod +x /opt/to_master.sh
yum install sshpass -y

SSH端口不默認:

echo Port 12345 > ~/.ssh/config
  1. 加入開機啟動
systemctl enable keepalived
  1. zabbix_server指定收集數據時使用的源IP
echo SourceIP=10.0.0.70 >> /etc/zabbix/zabbix_server.conf
  1. 配置zabbix-agent
sed -i '/^Server=/c Server=10.0.0.70' /etc/zabbix/zabbix_agentd.conf
sed -i '/^ServerActive=/c ServerActive=10.0.0.70' /etc/zabbix/zabbix_agentd.conf
  1. 關閉服務器,鏈接克隆一台zabbix-server02,再啟動

zabbix-agent

  1. 關閉服務,刪庫,導庫,授權
systemctl stop zabbix-proxy php-fpm nginx snmpd
systemctl disable zabbix-proxy php-fpm nginx snmpd
mysql -e "DROP DATABASE zabbix;"
mysql < zabbix.sql
mysql -e "create user 'zabbix'@'10.0.0.%' identified by '123456';grant all privileges on zabbix.* to 'zabbix'@'10.0.0.%';"
  1. 配置zabbix-agent2
sed -i '/^Server=/c Server=10.0.0.70' /etc/zabbix/zabbix_agent2.conf
sed -i '/^ServerActive=/c ServerActive=10.0.0.70' /etc/zabbix/zabbix_agent2.conf
  1. 重啟zabbix-agent2生效
systemctl start zabbix-agent2

zabbix-server02

  1. zabbix-server01鏈接克隆zabbix-server02,開機,修改主機名和IP
hostnamectl set-hostname zabbix-server02
sed -i 's#200#72#g' /etc/sysconfig/network-scripts/ifcfg-eth[01]
  1. 配置keepalived
cat <<EOF >/etc/keepalived/keepalived.conf
! Configuration File for keepalived
 
global_defs {
  router_id LVS_DEVEL 72
}
 
vrrp_instance VI_1 {
  state BACKUP
  interface eth0
  virtual_router_id 51
  priority 100
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 1111
  }
  virtual_ipaddress {
    10.0.0.70
  }
  notify_master /opt/to_master.sh
}
EOF
  1. 配置keepalived調用腳本
cat <<EOF > /opt/to_master.sh
#!/bin/bash
sshpass -p 1 ssh -o StrictHostKeyChecking=no root@10.0.0.71 "systemctl stop zabbix-server"
systemctl start zabbix-server
EOF
chmod +x /opt/to_master.sh
  1. 重啟keepalived生效
systemctl restart keepalived

驗證測試

  1. 關閉一台server,VIP漂移,正常使用zabbix
  2. 查看數據歷史間隔:會丟失個別監控項的一次監控數據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM