Zabbix 5.0 優化建議

Blog:部落格園 個人

在使用Zabbix過程中,正確的調整Zabbix系統,使之保持高性能是非常重要的,能夠充分利用硬體資源,監控更多主機和性能指標。

硬體

關於zabbix server端硬體的建議:

  • 處理器:使用最新穩定的處理器,一般同級別的處理器,新一代的往往比上一代的性能更強、功耗更低;
  • 磁碟:建議固態硬碟,或者不低於10K RPM的機械硬碟,建議做RAID;
  • 記憶體:通常建議不低於8G,若監控主機超過1000台,建議配置更高的記憶體;
  • 網卡:建議至少千兆網卡;

官網硬體配置參考:

規模 平台 CPU/記憶體 資料庫 受監控的主機數量
小型 CentOS Virtual Appliance MySQL InnoDB 100
中型 CentOS 2 CPU cores/2GB MySQL InnoDB 500
大型 RedHat Enterprise Linux 4 CPU cores/8GB RAID10 MySQL InnoDB 或 PostgreSQL >1000
極大型 RedHat Enterprise Linux 8 CPU cores/16GB Fast RAID10 MySQL InnoDB 或 PostgreSQL >10000

Tips:實際配置應不低於官方推薦。

系統

  • 使用最新穩定版的作業系統,比如CentOS目前最新穩定版是7.9;
  • 最小化安裝系統鏡像,按需安裝Zabbix Server需要的依賴;
  • 調整內核參數,調整open filesmax user processes等參數;
  • 應以特定用戶最小許可權去運行Zabbix程式和文件;
  • 時間同步,在運行 Zabbix 的伺服器上擁有精確的系統日期非常重要;

資料庫

  • 推薦MySQL5.7+;
  • 獨立部署;
  • 推薦使用固態+Raid;
  • 足夠的磁碟空間

Zabbix 資料庫大小主要取決於這些變數,這些變數決定了存儲的歷史數據量:

  • 每秒處理值的數量;
  • 歷史數據;

Zabbix 將接收到的值保存一段固定的時間,通常為幾周或幾個月。 每個新值都需要一定量的磁碟空間用於數據和索引。

web服務

  • PHP:建議使用Zabbix官網推薦版本;
  • Nginx:建議使用最新穩定版本;

Zabbix Server

配置文件優化參考:

參數名稱 說明
CacheSize 256M 快取大小, 單位為位元組。 用於存儲主機、監控項、觸發器數據的共享記憶體大小。 Zabbix2.2.3以前的版本最大可配置值為2GB。
CacheUpdateFrequency 60 Zabbix 配置快取更新頻率, 單位為秒. 另外參考 runtime control 選項。
DebugLevel 3 指定調試等級: 0 – Zabbix進程的起停基本資訊 1 – 嚴重(Critical)資訊 2 – 錯誤(Error)資訊 3 – 警告(Warning)資訊 4 – 調試(Debug)資訊 (產生大量資訊) 5 – 擴展調試 (產生更多資訊) 另外可參考 runtime control 選項。
ExportFileSize 1G 每個導出文件的最大限制,單位為位元組。僅當ExportDir參數設置後才使用,用於輪轉生成導出的文件。 此參數從Zabbix 4.0.0開始支援。
HistoryCacheSize 128M 歷史快取數據大小, 單位為位元組。
HistoryIndexCacheSize 16M 歷史索引快取大小, 單位為位元組。\快取一個item大概需要大小為100位元組的空間。 該參數從Zabbix 3.0.0開始支援。
HistoryStorageDateIndex 1 啟用歷史數據預處理,可以將數據存儲到不同的基於時間的索引: 0 – 禁止 1 – 允許
HistoryStorageURL 你的ES URL 歷史數據存儲 HTTP[S] URL,用於把歷史數據存儲到ElasticSearch。 這個參數參考 Elasticsearch進行配置。
HistoryStorageTypes uint,dbl,str,log,text 以逗號分隔的列表配置哪些類型的歷史數據需要存儲到Elasticsearch。 這個參數參考 Elasticsearch 進行配置。
HousekeepingFrequency 3 Zabbix 執行 housekeeping 的頻率 (單位為小時)。 housekeeping負責從資料庫中刪除過期的資訊。 注意: 為了防止 housekeeper 負載過大 (例如, 當歷史和趨勢周期大大減小時), 對於每一個監控項,不會在一個housekeeping周期內刪除超過4倍HousekeepingFrequency 的過期數據。 因此, 如果 HousekeepingFrequency 是 1小時, 一個周期內不會刪除超過4小時的過期資訊 (從最舊的數據開始) 。 備註: 為降低 server壓力, housekeeping將在server啟動以後,延遲30分鐘執行。 因此, 如果 HousekeepingFrequency 是1小時,server啟動30分後執行第一次 housekeeping , 然後按1小時為周期重複執行。從Zabbix 2.4.0以後有了這種延遲行為。 從Zabbix 3.0.0開始,可以設置HousekeepingFrequency為0來禁止自動housekeeping。 此時 housekeeping 只能通過 housekeeper_execute 啟動, 在一個housuekeeping周期內刪除的過期資訊時長為從最後一次housekeeping以來到配置周期的4倍,不少於4小時且不大於4天。 也可參見運行控制 選項。
LogFile 日誌文件名稱。
LogFileSize 128 日誌文件大小,單位 MB。 0 – 禁止日誌文件自動回滾. 注意: 如果日誌文件達到限定的大小,文件回滾失敗, 不管是什麼原因, 現有的日誌會被截斷,並重新記錄日誌。
LogType file 日誌輸出類型: file – 寫入LogFile 參數指定的日誌文件中, system – 寫入syslog, console – 控制台輸出. 從Zabbix 3.0.0開始支援該參數。
LogSlowQueries 3000 資料庫查詢消耗時間,大於該時間將會記入日誌 (毫秒)。 0 – 不記錄慢查詢日誌。 DebugLevel=3時該選項可用。 從Zabbix 1.8.2開始支援該參數
MaxHousekeeperDelete 50000 一個housekeeping周期內,一個任務刪除的最大行數 (相應的表名,欄位名,值)。 如果設置為0,不限制刪除的行數,這種情況,你必須清楚這樣做的影響! 從Zabbix 1.8.2 開始支援該參數,僅在對已經被刪除的監控項進行歷史和趨勢數據刪除操作時有效。
ProxyConfigFrequency 180 Zabbix server 多少秒向Zabbix proxy 發送一次配置數據,用於被動模式的proxy 。 從Zabbix 1.8.3開始支援該參數。
ProxyDataFrequency 1 Zabbix server 多少秒向Zabbix proxy請求一次歷史數據, 用於被動模式的proxy。\從Zabbix 1.8.3開始支援該參數。
StartDBSyncers 8 資料庫進程的初始實例數量。 在版本1.8.5之前,上限是64。 這個參數從Zabbix 1.8.3開始得到了支援。
StartAlerters 12 報警進程的初始實例數量。 從Zabbix 3.4.0開始支援該參數。
StartDiscoverers 12 發現進程的初始實例數量。 在Zabbix 1.8.5版本之前,最大能設置為255。
StartEscalators 12 escalators進程的初始實例數量。 從Zabbix 3.0.0開始支援該參數。
StartHTTPPollers 6 HTTP 輪詢進程的初始實例數量1. 在Zabbix 1.8.5版本之前,最大能設置為255。
StartIPMIPollers 3 IPMI 輪詢進程的初始實例數量。 在Zabbix 1.8.5版本之前,最大能設置為255。
StartJavaPollers 6 Java 輪詢子進程的初始實例數量。1. 從Zabbix 2.0.0開始支援該參數。
StartLLDProcessors 2 Number of pre-forked instances of low-level discovery (LLD) workers1. The LLD manager process is automatically started when an LLD worker is started. This parameter is supported since Zabbix 4.2.0.
StartPingers 12 ICMP pingers進程的初始實例數量1. 在Zabbix 1.8.5版本之前,最大能設置為255。
StartPollersUnreachable 6 不可達主機 (包括IPMI 和 Java)的輪詢進程的初始實例數量。1. 從Zabbix 2.4.0開始,如果IPMI或Java輪詢器啟動,那麼至少有一個針對不可訪問主機的輪詢進程必須運行。 在Zabbix 1.8.5版本之前,最大能設置為255。 這個參數從Zabbix 1.8.3版本缺失。
StartPollers 12 輪詢進程的初始實例數量。1.\注意如果要內部,聚合,計算的監控項能正常工作,這個參數值必須非0。
StartPreprocessors 12 預處理工作進程的初始實例數量。\預處理管理進程將跟隨預處理工作進程啟動。1. 從Zabbix 3.4.0開始支援該參數。
StartProxyPollers 3 被動proxy的輪詢進程初始實例數量。1.\在Zabbix 1.8.5版本之前,最大能設置為255。 從Zabbix 1.8.3開始支援該參數。
StartSNMPTrapper 0 設置為1, SNMP trapper進程將啟動。 從Zabbix 2.0.0開始支援該參數。
StartTimers 1 計時器進程的初始實例數量。 計時器進程處理基於時間的觸發器和維護期功能。 只有第一個計時器進程處理維護期。 從Zabbix 2.2.0開始支援該參數。
StartTrappers 12 trapper進程的初始實例數量。1. Trapper接收來自Zabbix發送者、主動agent和主動proxies的數據。 至少要運行一個trapper進程用於在web前端展示伺服器可用性和隊列視圖。 在Zabbix 1.8.5版本之前,最大能設置為255。
StartVMwareCollectors 2 vmware採集器進程的初始實例數量。\從Zabbix 2.2.0開始支援該參數。
StatsAllowedIP 逗號分隔的IP地址列表,可選CIDR表示法, 或外部Zabbix實例的DNS名稱. 只接受來自此處列出的地址的Stats請求。如果未設置此參數,則不接受stats請求。 如果啟用IPv6支援,則’127.0.0.1′, ‘::127.0.0.1’, ‘::ffff:127.0.0.1′ 與’::/0’等價表示為允許任何IPv4或IPv6地址。’0.0.0.0/0’可用於允許任何IPv4地址。 示例: StatsAllowedIP=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.example.com 從Zabbix 4.2.0開始支援此參數。
Timeout 3 agent, SNMP設備或外部檢查的超時時長(單位為秒)。
TrapperTimeout 300 定義trapper處理數據的超時時間。
TrendCacheSize 16M 趨勢數據快取大小,單位位元組。 用於存儲趨勢數據的共享記憶體大小。
UnavailableDelay 60 在資源不可用期間,Zabbix多少秒檢查一次資源是否可用。
UnreachableDelay 15 在資源不可達期間 ,Zabbix多少秒檢查一次資源是否可達。
UnreachablePeriod 45 在主機 不可用多少秒後,即視為主機不可用。
User zabbix 降低系統某普通用戶的許可權。 僅當以’root’身份運行且AllowRoot參數設置為禁止時,該參數才起作用。 從Zabbix 2.4.0開始支援該參數。
ValueCacheSize 8M
VMwareCacheSize 8M 存儲VMware數據的共享記憶體大小。 VMware內部檢查[vmware,buffer,…] 可以用來監控VMware快取使用情況 (參見 內部檢查)。 注意,如果沒有配置並啟動vmware收集器實例,那麼共享記憶體就不會被分配。\從Zabbix 2.2.0開始支援該參數。
VMwareFrequency 60 間隔多少秒從單個VMware服務收集數據。\任何VMware監控項的最小更新周期都大於或等於該時間。 從Zabbix 2.2.0開始支援該參數。
VMwarePerfFrequency 60 間隔多少秒從單個VMware服務檢索性能計數器統計數據。 該時間為任一VMware 監控項(使用VMware性能計數器)的最小更新間隔。 從Zabbix 2.2.9, 2.4.4開始支援該參數。
VMwareTimeout 10 vmware採集器等待 VMware 服務(vCenter or ESX 管理程式)響應的最大時長。 從Zabbix 2.2.9, 2.4.4開始支援該參數。

Tips:太多的數據採集進程 (pollers, unreachable pollers, HTTP pollers, Java pollers, pingers, trappers, proxypollers) 與 IPMI manager , SNMP trapper 和預處理工作進程(preprocessing workers)一起會耗盡預處理管理器的每進程文件描述符限制。因此,需要增大open filesmax user processes

Agent

推薦使用Zabbix Agent2。Agent和Agent2版本對比如下:

參數 Zabbix agent Zabbix agent 2
程式設計語言 C 一部分使用C,其他用go
守護進程 yes no (Windows 5.0.4之後版本支援)
擴展支援 自定義C的可載入模組 自定義GO的插件
請求
支援平台 Linux, IBM AIX, FreeBSD, NetBSD, OpenBSD, HP-UX, Mac OS X, Solaris: 9, 10, 11, Windows: 從xp開始所有的桌面和服務端版本。 Linux, Windows: 從xp開始所有的桌面和服務端版本。
支援的加密庫 GnuTLS 3.1.18 and newer OpenSSL 1.0.1, 1.0.2, 1.1.0, 1.1.1 SSL庫 – tested with versions 2.7.4, 2.8.2 (某些限制的使用, 查看 加密詳情頁). Linux: OpenSSL 1.0.1和最新版本在Zabbix 4.4.8之後支援。 MS Windows: OpenSSL 1.1.1或者最新版. OpenSSL庫必須開啟PSK,否則LibreSSL不支援.
監控進程
進程 每個server/proxy都有獨立的進程。 單個進程多執行緒。 這最大的執行緒數由GOMAXPROCS環境變數決定。
指標 UNIX: 查看支援的 items. Windows: 查看指定Windows版本的監控項. UNIX: Zabbix agent支援所有指標。 其他的, agent2 提供Docker, Memcached, MySQL, PostgreSQL, Redis, systemd (查看agent2的監控項)的Zabbix-native監控方案 Windows: Zabbix agent支援所有指標和HTTPS檢查 net.tcp.service* , LDAP. 其他的, agent2 提供關於PostgreSQL, Redis的Zabbix-native監控方案。
並發 單進程按監控項順序進行檢查 來自不同插件的檢查或一個插件內的多個檢查可以同時執行。
計劃/靈活 間隔 僅支援被動檢查。 支援主動檢查。
第三方traps no yes
Additional features
永久存儲 no yes
超時設置 只能定義agent級別。 超時插件可以覆蓋在agent上的級別超時設置。
刪除用戶許可權 yes (Unix-like systems only) no
用戶可配置密碼套件 yes no

Proxy

Zabbix proxy 是一個可以從一個或多個受監控設備採集監控數據並將資訊發送到 Zabbix server 的進程,主要是代表 Zabbix server 工作。 所有收集的數據都在本地快取,然後傳輸到 proxy 所屬的 Zabbix server。

部署Zabbix proxy 是可選的,但可能非常有利於分擔單個 Zabbix server 的負載。 如果只有代理採集數據,則 Zabbix server 上會減少 CPU 和磁碟 I/O 的開銷。

建議:

  • 盡量減少Server直接監控主機的數量,建議由多個Proxy負擔大部分的負載;
  • 選擇性能較好的主機作為Proxy;

配置優化參考:

必須配置 說明
CacheSize 256M 快取大小, 單位為位元組。 用於存儲主機、監控項數據的共享記憶體大小。 在Zabbix 5.0.1版本這參數的最大值可以從8G增加到64G。
ConfigFrequency 180 每隔多少秒proxy從Zabbix server獲取配置數據。 該參數只有主動proxy才會使用,proxy工作模式由參數ProxyMode決定。
DataSenderFrequency 1 Proxy將採集到的數據以一定的時間間隔(單位為秒)發送給Zabbix server。 該參數只有主動proxy才會使用,proxy工作模式由參數ProxyMode決定。
DebugLevel 3 指定調試等級: 0 – Zabbix進程的起停基本資訊 1 – 重要(Critical)資訊 2 – 錯誤(Error)資訊 3 – 警告(Warning)資訊 4 – 調試(Debug)資訊 (產生大量資訊) 5 – 擴展調試 (產生更多資訊)
EnableRemoteCommands 0 是否允許Zabbix server遠程執行命令。 0 – 禁止 1 – 允許 從Zabbix 3.4.0開始支援該參數。
HeartbeatFrequency 60 心跳資訊發送頻率,單位為秒。 用於監視proxy的可用性。 0 – 禁止 該參數只有主動proxy才會使用,proxy工作模式由參數ProxyMode決定。
HistoryCacheSize 128M 歷史快取數據大小, 單位為位元組。 存儲歷史數據使用共享記憶體.
HistoryIndexCacheSize 16M 歷史索引快取大小, 單位為位元組。\快取一個item大概需要大小為100位元組的空間。 該參數從Zabbix 3.0.0開始支援。
HousekeepingFrequency 1 Zabbix 執行 housekeeping 的頻率 (單位為小時)。 housekeeping負責從資料庫中刪除過期的資訊。 注意: 為了防止 housekeeper 負載過大 (例如, 當歷史和趨勢周期大大減小時), 對於每一個監控項,不會在一個housekeeping周期內刪除超過4倍HousekeepingFrequency 的過期數據。 因此, 如果 HousekeepingFrequency 是 1小時, 一個周期內不會刪除超過4小時的過期資訊 (從最舊的數據開始) 。 備註: 為降低 server壓力, housekeeping將在server啟動以後,延遲30分鐘執行。 因此, 如果 HousekeepingFrequency 是1小時,serverg啟動30分後執行第一次 housekeeping , 然後按1小時為周期重複執行。從Zabbix 2.4.0以後有了這種延遲行為。 從Zabbix 3.0.0開始,可以設置HousekeepingFrequency為0來禁止自動housekeeping。 此時 housekeeping 只能通過 housekeeper_execute 啟動, 在一個housuekeeping周期內刪除的過期資訊時長為從最後一次housekeeping以來到配置周期的4倍,不少於4小時且不大於4天。
LogFile 日誌文件名字
LogFileSize 128M 日誌文件大小,單位 MB。 0 – 禁止日誌文件自動回滾. 注意: 如果日誌文件達到限定的大小,文件回滾失敗, 不管是什麼原因, 現有的日誌會被截斷,並重新記錄日誌。
LogRemoteCommands 1 當執行shell命令時可以記錄日誌。 0 – 禁止 1 – 允許 從Zabbix 3.4.0開始支援該參數。
LogType file 日誌輸出類型: file – 寫入LogFile 參數指定的日誌文件中, system – 寫入syslog, console – 控制台輸出. 從Zabbix 3.0.0開始支援該參數。
LogSlowQueries 3000 資料庫查詢消耗時間,大於該時間將會記入日誌 (毫秒)。 0 – 不記錄慢查詢日誌。 DebugLevel=3時該選項可用。 從Zabbix 1.8.2開始支援該參數。
ProxyLocalBuffer 24 Proxy將在本地保留數據N小時,即使數據已與server同步。\如果第三方應用程式將使用本地數據,則可以使用此參數。
ProxyMode 0 Proxy工作模式。 0 – 主動模式 1 – 被動模式 從Zabbix 1.8.3開始支援該參數。 注意 當使用 Active proxy 時,敏感的 proxy 配置數據可供有權訪問Zabbix server trapper埠的應用使用。 因為第三方應用可以假裝是活動proxy並請求配置數據而不會進行身份驗證。
ProxyOfflineBuffer 72 如果無法連接Zabbix server,proxy將保留數據N小時。\舊數據將丟失。
StartDBSyncers 8 資料庫進程的初始實例數量。 在版本1.8.5之前,上限是64。 這個參數從Zabbix 1.8.3開始得到了支援。
StartDiscoverers 8 發現進程的初始實例數量。 在Zabbix 1.8.5版本之前,最大能設置為255。
StartHTTPPollers 3 HTTP 輪詢進程的初始實例數量。
StartIPMIPollers 1 IPMI 輪詢進程的初始實例數量。 在Zabbix 1.8.5版本之前,最大能設置為255。
StartJavaPollers 3 Java 輪詢子進程的初始實例數量。 從Zabbix 2.0.0開始支援該參數。
StartPingers 4 ICMP pingers進程的初始實例數量 在Zabbix 1.8.5版本之前,最大能設置為255。
StartPollersUnreachable 8 不可達主機 (包括IPMI 和 Java)的輪詢進程的初始實例數量。 從Zabbix 2.4.0開始,如果IPMI或Java輪詢器啟動,那麼至少有一個針對不可訪問主機的輪詢進程必須運行。\在Zabbix 1.8.5版本之前,最大能設置為255。 這個參數從Zabbix 1.8.3開始得到了支援。
StartPollers 12 輪詢進程的初始實例數量。\在Zabbix 1.8.5版本之前,最大能設置為255。
StartPreprocessors 8 pre-forked實例的預處理執行緒數量1. 預處理器工作進程啟動時,預處理管理器進程將自動啟動。 從Zabbix 4.2.0開始支援該參數。
StartSNMPTrapper 0 設置為1, SNMP trapper進程將啟動。 從Zabbix 2.0.0開始支援該參數。
StartTrappers 8 trapper進程的初始實例數量。 Trapper接收來自Zabbix發送者、主動agent的數據。 至少要運行一個trapper進程用於在web前端展示伺服器可用性和隊列視圖。 在Zabbix 1.8.5版本之前,最大能設置為255。
StartVMwareCollectors 2 vmware採集器進程的初始實例數量。\從Zabbix 2.2.0開始支援該參數。
StatsAllowedIP ip地址列表以」,」分割,也可以使用CIDR、或者DNS. 只接受ip里表中的請求. 如果未設置此參數,則不接受請求.如果啟用ipv6,則 ‘127.0.0.1’, ‘::127.0.0.1’, ‘::ffff:127.0.0.1′ ipv4和ipv6都支援 ,’::/0′ 支援IPv4或者IPv6地址. ‘0.0.0.0/0’ 只支援ipv4. 例如:StatsAllowedIP=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.example.com 從Zabbix 4.2.0開始支援該參數。
Timeout 3 agent、SNMP設備或外部檢查的超時時長(單位為秒)。
TrapperTimeout 60 定義trapper處理數據的超時時間。
UnavailableDelay 60 在資源不可達期間,Zabbix多少秒檢查一次資源是否可用。
UnreachableDelay 15 在資源不可 期間 ,Zabbix多少秒檢查一次資源是否可達.
UnreachablePeriod 45 在資源不可期間 ,Zabbix多少秒檢查一次資源是否可達。
VMwareCacheSize 64M 存儲VMware數據的共享記憶體大小。 VMware內部檢查[vmware,buffer,…] 可以用來監控VMware快取使用情況 (參見 內部檢查)。 注意,如果沒有配置並啟動vmware收集器實例,那麼共享記憶體就不會被分配。\從Zabbix 2.2.0開始支援該參數。
VMwareFrequency 60 間隔多少秒從單個VMware服務收集數據。\任何VMware監控項的最小更新周期都大於或等於該時間。 從Zabbix 2.2.0開始支援該參數。
VMwarePerfFrequency 60 間隔多少秒從單個VMware服務檢索性能計數器統計數據。 該時間為任一VMware 監控項(使用VMware性能計數器)的最小更新間隔。 從Zabbix 2.2.9, 2.4.4開始支援該參數。
VMwareTimeout 10 vmware採集器等待 VMware 服務(vCenter or ESX 管理程式)響應的最大時長。 從Zabbix 2.2.9, 2.4.4開始支援該參數。

注意:Zabbix只支援不帶BOM的UTF-8編碼的配置文件。