在使用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 files
、max 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 | 數據庫進程的初始實例數量。 |
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 files
、max 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編碼的配置文件。