zabbix官網:www.zabbix.com
本次實驗用到一個物理主機,兩個虛擬機
物理主機ip -->172.25.47.250
虛擬機server1 -->172.25.47.1—>服務端
虛擬機server2 --> 172.25.47.2—>客戶端
此處檢測都是被動監測,即server(主)->agent(被),server主動去監控agent
一、zabbix安裝
1.下載zabbix安裝包,放置在物理主機的/var/www/html/4.0目錄下(搭建yum倉庫)
注意:此處需要給目錄權限
2.虛擬機配置yum源[root@server1 ~]# cd /etc/yum.repos.d/
[root@server1 yum.repos.d]# ls
exam.repo redhat.repo
[root@server1 yum.repos.d]# vim zabbix.repo
[zabbix]
name=zabbix
baseurl=http://172.25.47.250/4.0
gpgcheck=0
[root@server1 yum.repos.d]# yum clean all
[root@server1 yum.repos.d]# yum repolist
3.配置數據庫
[root@server1 ~]# yum install mariadb-server -y ##安裝數據庫
[root@server1 ~]# systemctl enable mariadb
[root@server1 ~]# systemctl start mariadb
[root@server1 ~]# mysql_secure_installation ##安全初始化(此處設定密碼爲westos)
[root@server1 ~]# mysql -p
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'westos';
4.安裝zabbix(後端和前端不用裝在一個機器上,此處只是爲了看效果,故安裝在一個機子)
[root@server1 ~]# yum install zabbix-server-mysql -y ##後端服務
[root@server1 zabbix]# yum install zabbix-web-mysql -y ##前端web
5.導入數據並查看
[root@server1 ~]# cd /usr/share/doc/zabbix-server-mysql-4.0.5/
[root@server1 zabbix-server-mysql-4.0.5]# zcat create.sql.gz ##查看數據文件
[root@server1 zabbix-server-mysql-4.0.5]# ls
AUTHORS ChangeLog COPYING create.sql.gz NEWS README
[root@server1 zabbix-server-mysql-4.0.5]# zcat create.sql.gz |mysql -uzabbix -p zabbix ##導入數據庫(此過程可能會比較慢,請耐心等待)
[root@server1 zabbix-server-mysql-4.0.5]# mysql -p ##查看,此時可以看到數據被導入
MariaDB [(none)]> show databases;
MariaDB [(none)]> use zabbix
MariaDB [zabbix]> show tables;
6.修改zabbix配置文件
[root@server1 zabbix-server-mysql-4.0.5]# cd /etc/zabbix/
[root@server1 zabbix]# ls
web zabbix_server.conf
[root@server1 zabbix]# vim zabbix_server.conf ##配置文件
124 DBPassword=westos ##用戶密碼
[root@server1 zabbix]# systemctl start zabbix-server ##開啓zabbix
[root@server1 zabbix]# systemctl enable zabbix-server ##開機自啓
[root@server1 zabbix]# ps ax ##查看開啓進程
[root@server1 zabbix]# cd /etc/httpd/conf.d/
[root@server1 conf.d]# vim zabbix.conf
20 php_value date.timezone Asia/Shanghai
[root@server1 conf.d]# systemctl start httpd
[root@server1 conf.d]# systemctl enable httpd
7.瀏覽器訪問http://172.25.47.1/zabbix,進入zabbix的web界面
一直點擊下一步到下面界面,此處密碼配置的是westos
再下一步到下面界面,此處name本實驗是Zabbix server
下面界面是最信息的最後一次可修改
登陸zabbix(默認帳號是Admin,密碼是zabbix)
進入zabbix
8.此時可以看到有報,進行解決
安裝zabbix的agent
[root@server2 ~]# yum install -y zabbix-agent
[root@server2 ~]# systemctl start zabbix-agent
[root@server2 ~]#systemctl enable zabbix-agent
[root@server2 ~]# netstat -antlp | grep :10050 ##此時10050端口開啓
再次頁面刷新,可以看到告警消失
9.由於zabbix監控界面是英文的,此處可以改成中文界面
點擊界面右上角圖標
進行語言選擇
更新後,可以看到改成中文界面
二、agent
Zabbix agents 部署在被監控目標上,用於主動監控本地資源和應用程序,並將收集的數據發送給 Zabbix server
1、添加agent
1)配置yum源(由於server1已經配置,此處直接複製即可)
[root@server2 ~]# scp [email protected]:/etc/yum.repos.d/zabbix.repo /etc/yum.repos.d/
[root@server2 ~]# yum clean all
[root@server2 ~]# yum repolist
2)安裝並修改配置文件
[root@server2 ~]# yum install zabbix-agent -y
[root@server2 ~]# vim /etc/zabbix/zabbix_agentd.conf
98 Server=172.25.47.1 ##開啓自動發現
105 # Default:
106 # ListenPort=10050 ##表示開啓的默認端口是10050
139 ServerActive=172.25.47.1 ##開啓自動註冊
150 Hostname=server2 ##主機名
[root@server2 ~]# systemctl enable zabbix-agent
[root@server2 ~]# systemctl start zabbix-agent
[root@server2 ~]# cd /var/log/zabbix/
[root@server2 zabbix]# ls
zabbix_agentd.log
[root@server2 zabbix]# cat zabbix_agentd.log
3)添加agent
配置–> 主機–>創建主機,到下面界面進行填寫
添加完成後,點擊模板,進行選擇添加,完成後進行更新
可以看到配置成功
2、自動發現(自動發現是server端去發現客戶端)
實驗之前先刪除server2主機
1)點擊動作–>事件源選擇自動發現—>創建動作
點擊操作,添加操作
2)點擊自動發現—>創建發現規則
填寫名稱和ip範圍,並添加
3)點擊監測—>自動發現,可以看到server2已經被添加
如果儀表盤出現告警,修改服務的配置文件
[root@server1 ~]# cd /etc/zabbix/
[root@server1 zabbix]# vim zabbix_server.conf
243 # Default:
244 # StartDiscoverers=1 ##此數字默認是1,如有需要可往大改
3、自動註冊(自動註冊是客戶端主動去server上添加)
做自動註冊之前,先刪除調前一個實驗自動發現的server2主機
1)點擊配置—>事件源選擇自動註冊—>創建動作
名稱自取,主機名注意是自己的
2)操作
添加兩個操作,點擊添加
3)重啓agent
[root@server2 zabbix]# systemctl restart zabbix-agent
4)此時,主機server2已經添加
三、API
簡介
Zabbix API允許以編程方式檢索和修改Zabbix的配置,並提供對歷史數據的訪問
廣泛用於
- 創建新的應用程序以使用Zabbix;
- 將Zabbix與第三方軟件集成;
- 自動執行常規任務。
Zabbix API是基於Web的API,作爲Web前端的一部分提供。它使用JSON-RPC 2.0協議,這意味着兩件事:
- API包含一組獨立的方法
- 客戶端和API之間的請求和響應使用JSON格式進行編碼。
大多數API至少包含四種方法: get, create, update 和 delete ,分別是檢索,創建,更新和刪除數據
實驗
做API之前,先刪除之前註冊的server2,並停掉自動註冊
1、創建腳本,查看zabbix監控系統的API接口
1)創建腳本
[root@server1 ~]# vim zabbix-api.sh
curl -s -XPOST -H "Content-Type: application/json-rpc" -d ' ##利用curl命令模擬json格式的post請求
{
"jsonrpc": "2.0", ##這是標準的JSON RPC參數以標示協議版本。所有的請求都會保持不變
"method": "user.login", ##利用用戶登陸的方式獲取API
"params": {
"user": "Admin", ##zabbix監控系統的用戶名和密碼
"password": "zabbix"
},
"id": 1, ##這個字段用於綁定JSON請求和響應。響應會跟請求有相同的"id"。在一次性發送多個請求時很有用,這些也不需要唯一或者連續
"auth": null
}' http://172.25.47.1/zabbix/api_jsonrpc.php |python -m json.tool
# 採用POST方法向http://example.com/zabbix/api_jsonrpc.php發送此JSON對象. http://example.com/zabbix/是Zabbix前端地址。
# api_jsonrpc.php是調用API的PHP腳本。可在安裝可視化前端的目錄下找到。
2)執行腳本
[root@server1 ~]# sh zabbix-api.sh
{
"id": 1,
"jsonrpc": "2.0",
"result": "2d3f669b3084fa9a8f105b5b8b03e2de" ##API令牌
}
2、創建腳本,查看zabbix主機和被監控主機信息
1)編寫腳本
[root@server1 ~]# vim zabbix-api.sh
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 2,
"auth": "5cc8887ef4235a10d7a2ca40465e6a21" ##此處是zabbix的API令牌
}' http://172.25.47.1/zabbix/api_jsonrpc.php |python -m json.tool
2)執行腳本
[root@server1 ~]# sh zabbix-api.sh
3、添加主機腳本
1)編寫腳本
[root@server1 ~]# vim zabbix-api.sh
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.create", ## 調用host.create方法
"params": {
"host": "server2", ## 被監控的主機名
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "172.25.47.2", ## 被監控主機的ip
"dns": "",
"port": "10050" ## zabbix-agent的端口號
}
],
"groups": [
{
"groupid": "2" ## 建立的主機加入的羣組id
}
],
"templates": [
{
"templateid": "10001" ## 建立的主機使用的模版id
}
]
},
"id": 3,
"auth": "2d3f669b3084fa9a8f105b5b8b03e2de"
}' http://172.25.47.1/zabbix/api_jsonrpc.php |python -m json.tool
groupid和templateid的獲得方法如下:
2)執行腳本
[root@server1 ~]# sh zabbix-api.sh
{
"id": 3,
"jsonrpc": "2.0",
"result": {
"hostids": [
"10270" ##生成的主機的id號
]
}
}
3)查看結果
在監控界面此時可以看到server2主機添加
4、刪除監控主機的腳本
1)創建腳本
[root@server1 ~]# vim zabbix-api.sh
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.delete", ##調用host.delete方法
"params": [
"10270" ##刪除的主機的id號
],
"id": 4,
"auth": "2d3f669b3084fa9a8f105b5b8b03e2de"
}' http://172.25.47.1/zabbix/api_jsonrpc.php |python -m json.tool
2)執行腳本
[root@server1 ~]# sh zabbix-api.sh
{
"id": 4,
"jsonrpc": "2.0",
"result": {
"hostids": [
"10270"
]
}
}
3)查看結果
此時監控頁面的server2主機已經被刪除
四、監控http、nginx、mysql服務
實驗之前確保server2是被監控客戶機
1、監控http服務
1)安裝http服務
[root@server2 zabbix]# yum install httpd -y
[root@server2 zabbix]# systemctl enable httpd
[root@server2 zabbix]# systemctl start httpd
2)在監控頁面進行配置
點擊:主機—配置—模板—選擇 ---- Template App HTTP Service,並進行添加和更新
更新之後,可以看到server2上http已經被監控
2、監控nginx
注意,實驗之前應先關停http,因爲apacha和nginx都是用的80端口,同時開會有影響。
1)安裝nginx
[root@server2 ~]# ls
nginx-1.15.8.tar.gz
[root@server2 ~]# tar zxf nginx-1.15.8.tar.gz
[root@server2 ~]# cd nginx-1.15.8
[root@server2 nginx-1.15.8]# yum install gcc pcre-devel zlib-devel -y
[root@server2 nginx-1.15.8]# vim auto/cc/gcc
# debug
#CFLAGS="$CFLAGS -g"
[root@server2 nginx-1.15.8]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module ##安裝一個stub_status模塊
[root@server2 nginx-1.15.8]# make && make install
[root@server2 nginx-1.15.8]# cd /usr/local/nginx/conf/
[root@server2 conf]# vim nginx.conf
48 location /status {
49 stub_status on; ##Nginx中的stub_status模塊主要用於查看Nginx的一些狀態信息
50 access_log off; ##關閉日誌記錄
51 allow 127.0.0.1; ##本行與下一行表示,只允許本機訪問
52 deny all;
53 }
[root@server2 conf]# ln -s /usr/local/nginx/sbin/nginx /sbin/
[root@server2 conf]# nginx -t
[root@server2 conf]# nginx
2)用curl進行測試
[root@server2 conf]# curl -s http://127.0.0.1/status
Active connections: 1
server accepts handled requests
7 7 3
Reading: 0 Writing: 1 Waiting: 0
[root@server2 conf]# curl -s http://127.0.0.1/status |grep Active
Active connections: 1
[root@server2 conf]# curl -s http://127.0.0.1/status |grep Active|awk '{print $3}'
1
3)添加nginx監控項
[root@server2 conf]# cd /etc/zabbix/zabbix_agentd.d/
[root@server2 zabbix_agentd.d]# ls
userparameter_mysql.conf
[root@server2 zabbix_agentd.d]# cp userparameter_mysql.conf userparameter_nginx.conf
[root@server2 zabbix_agentd.d]# vim userparameter_nginx.conf
UserParameter=nginx.active,curl -s http://127.0.0.1/status |grep Active|awk '{print $3}' ##獲取連接數(nginx.active爲key值,獲得的連接數爲value值)
UserParameter=nginx.accept,curl -s http://127.0.0.1/status |awk NR==3 |awk '{print $1}' ##獲取接受請求數
[root@server2 zabbix_agentd.d]# systemctl restart zabbix-agent
4) 在zabbix server端獲取數據
[root@server1 ~]# yum install zabbix-get -y
[root@server1 ~]# zabbix_get -s 172.25.47.2 -p 10050 -k "nginx.active"
1
[root@server1 ~]# zabbix_get -s 172.25.47.2 -p 10050 -k "nginx.accept"
45
5)監控界面配置
1>創建兩個監控項
點擊配置–主機–點擊server2主機–監控項–創建監控項
2>添加圖形
配置–主機–點擊server2主機–圖形 --創建圖形
3>預覽
此時監控界面有信息,但是會看到頁面底下有亂碼,
解決方法,換字體
[root@server1 fonts]# pwd
/usr/share/zabbix/fonts ##下在字體到這個目錄下
[root@server1 fonts]# ls
graphfont.ttf simkai.ttf ##下載一個字體
[root@server1 fonts]# cd ..
[root@server1 zabbix]# cd include/
[root@server1 include]# vim defines.inc.php
:%s/graphfont/simkai/g ##讓系統識別用哪個字體
刷新監控頁面,可以看到顯示正常
3、監控mysql
1)監控頁面配置(此處server1安裝了mysql,故此處對server1操作,即Zabbix server主機)
配置步驟:點擊配置–主機–(Zabbix server)監控項–(Zabbix server)模板–添加Tempate DB MySQL模板–更新
配置前可以看到,監控項是88項
添加後可以看到監控項從原來的88項變成102項
2)配置數據庫
[root@server1 ~]# cd /etc/zabbix/zabbix_agentd.d/
[root@server1 zabbix_agentd.d]# ls
userparameter_mysql.conf
[root@server1 zabbix_agentd.d]# cat userparameter_mysql.conf ##查看數據庫兩個選項的key-value
3)編寫獲取key-value的讀取規則
[root@server1 zabbix_agentd.d]# mkdir /var/lib/zabbix
[root@server1 zabbix_agentd.d]# cd /var/lib/zabbix/
[root@server1 zabbix]# ls
[root@server1 zabbix]# vim .my.cnf
[mysql]
user = root
password = westos
[mysqladmin]
user = root
password = westos
[root@server1 zabbix]# systemctl restart zabbix-agent ##重啓,讀取配置文件
4)測試
[root@server1 zabbix]# zabbix_get -s 172.25.47.1 -p 10050 -k mysql.ping ##沒有返回值,是正常情況
zabbix_get [4019]: Check access restrictions in Zabbix agent configuration
看監控界面
點擊:主機—Zabbix server —圖形—MYSQL operations—預覽
可以看有監控圖形信息
4、導入監控模板
此處導入的是監控mysql的模板,實驗前,先清除上一實驗添加的監控mysql的模板
1)安裝模板
[root@server1 ~]# ls
percona-zabbix-templates-1.1.8-1.noarch.rpm zabbix-api.sh
[root@server1 ~]# rpm -q php php-mysql ##由於percona的監控腳本是使用php寫的,所以需要準備好php運行環境
php-5.4.16-42.el7.x86_64
php-mysql-5.4.16-42.el7.x86_64
[root@server1 ~]# rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm
2) 複製文件到agent目錄下
[root@server1 ~]# cd /var/lib/zabbix/percona/templates/
[root@server1 templates]# ls
userparameter_percona_mysql.conf
zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml
root@server1 templates]# cp userparameter_percona_mysql.conf /etc/zabbix /zabbix_agentd.d/ ##複製到此目錄下才能被識別
[root@server1 templates]# systemctl restart zabbix-agent ##重啓agent
3)修改php腳本
[root@server1 templates]# cd ..
[root@server1 percona]# cd scripts/
[root@server1 scripts]# ls
get_mysql_stats_wrapper.sh ss_get_mysql_stats.php
[root@server1 scripts]# vim ss_get_mysql_stats.php
30 $mysql_user = 'root';
31 $mysql_pass = 'westos';
執行腳本,返回值是0
[root@server1 scripts]# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
0
4) 清除緩存文件
執行腳本會產生緩存,需要清理
[root@server1 scripts]# cd /tmp/
[root@server1 tmp]# ls
localhost-mysql_cacti_stats.txt ##產生的緩存
systemd-private-534822e83d4a47189351d6015519fc74-httpd.service-y8uyZp
systemd-private-534822e83d4a47189351d6015519fc74-mariadb.service-5bZ4qE
systemd-private-72062f78859e44b79bdd16ea1a6c7b7b-httpd.service-r2upDe
systemd-private-72062f78859e44b79bdd16ea1a6c7b7b-mariadb.service-bDoBVh
systemd-private-c8a2ee5c445a4ef0ac8f1a6b6f174bb0-httpd.service-kwerxT
systemd-private-c8a2ee5c445a4ef0ac8f1a6b6f174bb0-mariadb.service-0MdS9H
#可以看到此緩存文件的是root用戶執行產生的,會與zabbix用戶在執行時產生衝突
[root@server1 tmp]# ll localhost-mysql_cacti_stats.txt
-rw-r--r-- 1 root root 1347 May 4 07:01 localhost-mysql_cacti_stats.txt
#刪除緩存文件
[root@server1 tmp]# rm -fr localhost-mysql_cacti_stats.txt