Zabbix是一個企業級的、開源的、分布式監控解決方案。[1]
- Zabbix可以監控網絡和服務的監控狀況.
- Zabbix利用靈活的告警機制,允許用戶對事件發送基於Email的告警. 這樣可以保證快速的對問題作出相應.
- Zabbix是零成本的. 因為Zabbix編寫和發布基於GPL V2協議. 意味着源代碼是免費發布的.
Zabbix特性如下[2]:
- 數據收集
- 靈活的閥值定義
- 高級告警配置
- 實時繪圖
- 擴展的圖形化顯示
- 歷史數據存儲
- 配置簡單
- 模板使用
- 網絡自動發現
- 快速的web接口
- Zabbix API
- 權限系統
- 全特性、agent易擴展
- 二進制守護進程
- 具備應對復雜環境情況
可以總結為如下三個特點
1)靈活的通知機制:allows users to configure e-mail based alerts for virtually any event;
2)數據可視化;
3)所有報告、統計、參數配置都可通過web端完成;
所以zabbix很適合服務器集群管理員進行功能規划(capacity planning)
1 概覽
- 架構
- Server
- database storage
- web interface
- proxy
- agent
- 數據流(data flow)
其中,Zabbix Server為中心組件,用來獲取agent存活狀況及監控數據和統計. 所有的配置、統計、操作數據均通過Server進行存取.
Zabbix agent部署在被監控機器上用來監控本地資源和應用(如硬盤、內存、處理器統計等)
2 術語概念
2.1 server / client / proxy
Zabbix server的功能可以分為三部分:server、web前端和database。
Server執行polling和trapping來采集數據,評估是否觸發觸發器,發送報警給用戶
agent向其報告有效數據和統計。
database存儲所有configuration, statistical and operational data。
server和web前端都與database進行交互。
Zabbix server以守護(daemon)進程方式運行
2.2 命令行工具
Sender / Get
3 zabbix進程構成 [3]
默認情況下zabbix包含5個程序:
zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_sender、zabbix_server,另外一個zabbix_java_gateway是可選
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主動去取數據。
zabbix_proxy
zabbix代理守護進程。功能類似server,
唯一不同的是它只是一個中轉站,它需要把收集到的數據提交/被提交到server里。
zabbix_java_gateway
zabbix2.0之后引入的一個功能。顧名思義:Java網關,類似agentd,但是只用於Java方面。
需要特別注意的是,它只能主動去獲取數據,而不能被動獲取數據。它的數據最終會給到server或者proxy。
4 安裝zabbix
首先安裝MariaDB數據庫。Linux發行版,使用repository configuration tool,選擇自己合適的安裝步驟。
- 卸載mysql
如果已經安裝了mysql,需要先卸載mysql,否則安裝過程中會出現沖突。
- 本機選擇10.1stable for centos7 x86_64
//添加源
shell> cat /etc/yum.repos.d/mariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
shell> yum install MariaDB-server MariaDB-client mariadb
//服務管理,使用如下命令start/stop MariaDB:
shell> sudo systemctl start mariadb.service #直接用mariadb也行
shell> sudo systemctl stop mariadb.service
shell> sudo systemctl enable mariadb.service #開機自啟動
從10.1起,Galera Cluster(同步MariaDB數據庫的多master集群的工具)默認包含在MariaDB中。
see also Installing MariaDB with yum.
4.1 zabbix sever [4]
安裝
shell> rpm -ivh http://repo.zabbix.com/zabbix/2.2/rhel/7/x86_64/zabbix-release-2.2-1.el7.noarch.rpm
//for Zabbix server and web frontend with mysql database
shell> yum install zabbix-server-mysql zabbix-web-mysql
//可以將server與agent安裝在同一台機器
shell> yum install zabbix-agent
創建zabbix數據庫以及遠程用戶
[user@host ~]# mysql -uroot -p
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'your_password';
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@'172.16.%.%' identified by 'your_password';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> select host,user from mysql.user;
+-----------------------+--------+
| host | user |
+-----------------------+--------+
| 127.0.0.1 | root |
| 172.16.%.% | zabbix |
| ::1 | root |
| localhost | |
| localhost | fsj |
| localhost | root |
| localhost | zabbix |
| localhost.localdomain | |
+-----------------------+--------+
- 導入初始化schema和data
shell> cd /usr/share/doc/zabbix-server-mysql-2.2.15/create
shell> mysql -uroot -p zabbix < schema.sql
shell> mysql -uroot -p zabbix < images.sql
shell> mysql -uroot -p zabbix < data.sql
- Edit database configuration in zabbix_server.conf
shell> vi /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
-
開啟zabbix-server服務:systemctl start zabbix-server
-
Editing PHP configuration for Zabbix frontend
- 修改timezone:
php_value date.timezone Asia/Shanghai
- 重啟httpd服務:service httpd restart
- 修改timezone:
或者通過sed調整php配置[6]
shell> sed -i 's/^.*date.timezone =.*$/date.timezone = Asia\/Shanghai/g' /etc/php.ini
shell> sed -i 's/^.*post_max_size =.*$/post_max_size = 16M/g' /etc/php.ini
shell> sed -i 's/^.*max_execution_time =.*$/max_execution_time = 300/g' /etc/php.ini
shell> sed -i 's/^.*max_input_time =.*$/max_input_time = 300/g' /etc/php.ini
shell> sed -i 's/^.* memory_limit =.*$/memory_limit = 128M/g' /etc/php.ini
shell> service httpd restart
- 配置服務開機啟動
shell> chkconfig zabbix-server on
shell> chkconfig zabbix-agent on
shell> chkconfig httpd on
訪問 http://your-zabbix-server-ip/zabbix
默認username/password 是Admin/zabbix.
- 如果出現錯誤:zabbix server is not running
解決辦法:設置SELinux 成為permissive模式 shell> setenforce 0
- 如果出現防火牆相關問題,打開agent的端口
查看zabbix監聽端口:
shell> netstat -nlop | grep zabbix
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 23904/zabbix_server off (0.00/0/0)
tcp6 0 0 :::10051 :::* LISTEN 23904/zabbix_server off (0.00/0/0)
打開防火牆該端口:
shell> iptables -I INPUT -p tcp --dport 10051 -m state --state NEW,ESTABLISHED -j ACCEPT
shell> iptables -I OUTPUT -p tcp --sport 10051 -m state --state ESTABLISHED -j ACCEPT
也可以批量修改其他端口:
shell> iptables-save > firewalls.txt
shell> vim firewalls.txt
shell> iptables-restore <firewalls.txt
或者直接關閉防火牆:# systemctl stop firewalld
see also Linux防火牆配置(iptables, firewalld)
4.2 zabbix agent
shell> sudo rpm -ivh http://repo.zabbix.com/zabbix/2.2/rhel/7/x86_64/zabbix-release-2.2-1.el7.noarch.rpm
shell> sudo yum install zabbix-agent zabbix-sender -y
shell> grep -Ev '(^$|^#)' /etc/zabbix/zabbix_agentd.conf #修改server地址
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=172.16.44.5
Hostname=Zabbix server fsj
Include=/etc/zabbix/zabbix_agentd.d/
shell> sudo service zabbix-agent start
shell> sudo systemctl enable zabbix-agent
5 用戶管理
權限管理並不是直接設置一個user對應於一個host的什么權限,而是設置user groups對應與host groups的權限。
切換到permissions選項卡
6 開始監控
6.1 添加Zabbix agent(局域網其他機器)以及其item
新建host
其中,最好有一個Host name項和/etc/zabbix/zabbix_agentd.conf
中Hostname保持一致。
如果不存在host與配置文件中的Hostname相同,那么運行之后log文件會報錯host xxx(Hostname值) not found
,但是前端host條目依然可以獲取到數據。
修改conf文件后要重啟服務才能生效
新建item
其中key表示要監測的的信息。
- 詳細:https://www.zabbix.com/documentation/2.2/manual/config/items/itemtypes/zabbix_agent
- Items supported by platform
在configuration->hosts頁面可看到剛剛添加的host,如果available項為綠色Z表示一切正常。
有可能出現如下錯誤
Received empty response from Zabbix Agent at [x.x.x.x]. Assuming that agent dropped connection because of access permission
到Monitoring -> Latest data頁面查看監控到的實時數據
點擊graph可以查看cpu load的折線圖。
6.2 觸發器
一個觸發器包括一個定義了數據閾值的表達式。
格式為{<server>:<key>.<function>(<parameter>)}<operator><constant>
。
其中:
- key: 該server定義的item
- function: https://www.zabbix.com/documentation/2.2/manual/appendix/triggers/functions
- parameter: 數字n表示n秒,#n表示最近n個值,n[m|h|d]表示n[分鍾|小時|天]
輸入數據如果高於該閾值,觸發器就會報警。
6.2.1 創建觸發器
激活觸發器 shell> cat /dev/urandom | md5sum
更多觸發器示例:
{www.zabbix.com:system.cpu.load[all,avg1].last()}>5
{www.zabbix.com:system.cpu.load[all,avg1].last()}>5|{www.zabbix.com:system.cpu.load[all,avg1].min(10m)}>2
{www.zabbix.com:vfs.file.cksum[/etc/passwd].diff()}=1
6.2.2 通知
Administration -> Media type 設置 email(需要有email軟件支持)
新建action
查看發送情況
這里沒有設email相關,所以發送失敗
7 使用模版
點擊host,切換到templates選項卡可以關聯想要的模版。
我們也可以通過 Configuration → Templates 可以創建空模版。然后把現有的item、trigger等拷貝到該模版,方便以后批量應用。