Zabbix 5.0 優化建議

不羈的羅恩發表於2021-05-20

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編碼的配置檔案。

相關文章