zabbix
zabbix概念
對於運維人員來說,監控是非常重要的,想要保證線上業務整體能夠穩定運行,那麼我們就需要實時關注與其相關的各項指標是否正常。一個業務系統背後,往往存在着很多服務器、網絡設備等硬件資源,如果我們想方便、集中地管理他們,就需要依靠一些外部的工具, zabbix就是一個被廣泛使用的,能夠實現集中監控管理的應用程序。
常見的開源監控軟件:cacti、nagios、zabbix、smokeping、open-falcon等;
- Cacti:基於LAMP平臺展現的網絡流量監測及分析工具,通過SNMP技術或自定義腳本從目標設備/主機獲取監指標信息;其次進行數據存儲,調用模版將數據存到數據庫,使用rrdtool存儲和更新數據,通過rrdtool繪製結果圖形;最後進行數據展現通過web方式將監控結果呈現出來。
- Nagios:用來監視系統和網絡的開源應用軟件,利用其衆多的插件實現對本機和遠端服務的監控,當被監控對象發生異常時,會及時向管理員告警,提供一批預設好的監控插件,用戶可以之間調用,也可以自定義Shell腳本來監控服務,適合各企業的業務監控,可通過Web頁面顯示對象狀態、日誌、告警信息,分層告警機制及自定義監控相對薄弱。
- Smokeping:是一款用於網絡性能監測的開源監控軟件,主要用於對IDC的網絡狀況,網絡質量,穩定性等做檢測,通過rrdtool製圖方式,圖形化地展示網絡的時延情況,進而能夠清楚的判斷出網絡的即時通信情況。
- Open-falcon:小米公司開源出來的監控軟件,監控能力和性能較強。
- Zabbix:目前使用較多的開源監控軟件,可橫向擴展、自定義監控項、支持多種監控方式、可監控網絡與服務等。
- 商業監控解決方案:
zabbix支持的通訊方式:
- agent:通過專門的代理程序進行監控,與常見的master/agent模型類似,如果被監控對象支持對應的agent,推薦首選;
- ssh/telnet:通過遠程控制協議進行通訊,比如ssh或者telnet。
- SNMP:通過SNMP協議與被監控對象進行通訊,SNMP協議全稱Simple Network Management Protocol,譯爲“簡單網絡管理協議”,通常來說,我們無法在路由器,交換機這種硬件上安裝agent,但是這些硬件往往都支持SNMP協議,SNMP是一種比較久遠的、通行的協議,大部分的網絡設備都支持這種協議。其實SNMP協議的工作方式也可以理解爲master/agent的工作方式,只不過是在這些設備中內置了SNMP的agent而已,所以,大部分的網絡設備都支持這種協議。
- IPMI:通過IPMI接口進行監控,我們通過標準的IPMI硬件接口,監控被監控對象的物理特徵,比如電壓,溫度,風扇狀態,電源狀態等。
- JMX:通過JMX進行監控,JMX(Java Management Extensions,即Java管理擴展),監控JVM虛擬機時,使用這種方法是非常不錯的選擇。
一般情況下,我們將zabbix agent部署到被監控主機上,由agent採集數據,報告給負責監控的中心主機,中心主機就是master/agent模型中的master,負責監控的中心主機被稱爲zabbix server,zabbix server 將從agent端接收到的信息存儲到zabbix的數據庫中。而zabbix的數據庫端被我們稱爲 zabbix database,如果管理員需要查看各種監控信息,則需要zabbix的GUI,zabbix的GUI是一種 web GUI,我們稱爲zabbix web,zabbix web 是php編寫的,所以,如果想要使用zabbix web展示相關監控信息,需要依賴於LAMP環境,不管是zabbix server,或是zabbix web,他們都需要連接到zabbix database 獲取相關數據,如下圖:
zabbix支持分佈式監控,當監控規模變得龐大時,我們可以把成千上萬臺的被監控對象分成不同的區域,每個區域中設置一臺代理主機,區域內的每個被監控對象的信息被agent採集,提交給代理主機。在這個區域內,代理主機的作用就像是zabbix server,我們稱代理主機爲zabbix Proxy,zabbix Proxy再將收集到的信息統一提交給zabbix server處理,這樣,zabbix Proxy分攤了zabbix server的壓力,同時,我們還能夠通過統一的監控入口,監控所有的對象,當監控規模大到需要使用zabbix Proxy時,zabbix的架構如下圖:
zabbix 各組件:
- zabbix agent :部署在被監控主機上,負責被監控主機的數據,並將數據發送給zabbix serve
- zabbix server:負責接收agent發送的報告信息,並且負責組織配置信息、統計信息、操作數據等。
- zabbix database:用於存儲所有zabbix的配置信息、監控數據的數據庫。
- zabbix web:zabbix的web界面,管理員通過web界面管理zabbix配置以及查看zabbix相關監控信息,可以單獨部署在獨立的服務器上。
- zabbix proxy:可選組件,用於分佈式監控環境中,zabbix proxy 代表server端,完成局部區域內的信息收集,再統一發往server端。
agent端採集完數據,主動發送給server端的模式稱之爲主動模式;agent不主動發送,等待server過來拉取數據,稱爲被動模式。
zabbix安裝
一、Ubuntu上apt安裝zabbix
更改Ubuntu的apt源
root@ubuntu:~# cat /etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
安裝數據庫
root@ubuntu:~# wget https://repo.zabbix.com/zabbix/4.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.2-1+bionic_all.deb
root@ubuntu:~# dpkg -i zabbix-release_4.2-1+bionic_all.deb
root@ubuntu:~# apt update
安裝Zabbix server,Web前端,agent
root@ubuntu:~# apt -y install zabbix-server-mysql zabbix-frontend-php zabbix-agent
創建初始數據庫
root@ubuntu:~# mysql
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix.* to [email protected] identified by '123456';
此時MySQL監聽的可能是本機的127.0.0.1端口,無法使用IP地址連接,可以修改MySQL監聽端口
root@ubuntu:~# ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:10050 0.0.0.0:*
LISTEN 0 80 127.0.0.1:3306 0.0.0.0:*
LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:10050 [::]:*
LISTEN 0 128 *:80 *:*
LISTEN 0 128 [::]:22 [::]:*
root@ubuntu:~# vim /etc/mysql/mariadb.conf.d/50-server.cnf
bind-address = 0.0.0.0 #修改成需要的地址
root@ubuntu:~# systemctl restart mysql #重啓MySQL
導入初始架構和數據,系統將提示您輸入新創建的密碼
root@ubuntu:~# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p123456 -h 192.168.184.148 zabbix
編輯配置文件
root@ubuntu:~# vim /etc/zabbix/zabbix_server.conf
DBHost=192.168.184.148
DBPassword=123456
DBPort=3306
爲zabbix前端配置PHP
root@ubuntu:~# vim /etc/zabbix/apache.conf
<IfModule mod_php7.c>
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value max_input_vars 10000
php_value always_populate_raw_post_data -1
php_value date.timezone Asia/Shanghai
</IfModule>
啓動zabbix server和agent 進程
root@ubuntu:~# systemctl restart zabbix-server zabbix-agent apache2
root@ubuntu:~# systemctl enable zabbix-server zabbix-agent apache2
開始配置web前端,在瀏覽器上輸入zabbix server IP地址/zabbix,開始安裝
可以跟着官網的指引安裝
https://www.zabbix.com/documentation/4.2/manual/installation/install#installing_frontend
檢查全部OK後繼續下一步
Database host 輸入MySQL所在服務器的IP地址
host 就是zabbix server的IP地址
確認無誤後繼續下一步
登錄用戶Admin,密碼zabbix
二、編譯安裝zabbix4.2.4
1.安裝Mariadb數據庫
root@ubuntu:# apt install mariadb-server mariadb-client -y
2. apt-get install apache2 apache2-bin apache2-data apache2-utils fontconfig-config fonts-dejavu-core fping libapache2-mod-php libapache2-mod-php7.2 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libfontconfig1 libgd3 libiksemel3 libjbig0 libjpeg-turbo8 libjpeg8 liblua5.2-0 libodbc1 libopenipmi0 libsensors4 libsnmp-base libsnmp30 libsodium23 libssh2-1 libtiff5 libwebp6 libxpm4 php-bcmath php-common php-gd php-ldap php-mbstring php-mysql php-xml php7.2-bcmath php7.2-cli php7.2-common php7.2-gd php7.2-json php7.2-ldap php7.2-mbstring php7.2-mysql php7.2-opcache php7.2-readline php7.2-xml snmpd ssl-cert ttf-dejavu-core libmysqlclient-dev libxml2-dev libxml2 snmp libsnmp-dev libevent-dev openjdk-8-jdk curl libcurl4-openssl-dev
3.下載及編譯安裝zabbix-4.2.4安裝包
root@ubuntu:/usr/local/src# ll
-rw-r--r-- 1 root root 18271978 Jul 13 17:42 zabbix-4.2.4.tar.gz
root@ubuntu:/usr/local/src# tar xvf zabbix-4.2.4.tar.gz
root@ubuntu:/usr/local/src# cd zabbix-4.2.4/
root@ubuntu:/usr/local/src/zabbix-4.2.4# ./configure --prefix=/apps/zabbix_server --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --enable-java
root@ubuntu:/usr/local/src/zabbix-4.2.4# make && make install
4.創建zabbix數據庫並授權
root@ubuntu:~# mysql
MariaDB [(none)]> create database zabbix_server character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix_server.* to [email protected] identified by '123456';
5.初始化數據庫
root@ubuntu:/usr/local/src/zabbix-4.2.4/database/mysql# pwd
/usr/local/src/zabbix-4.2.4/database/mysql
root@ubuntu:/usr/local/src/zabbix-4.2.4/database/mysql# mysql -uzabbix -p123456 -h192.168.184.148 zabbix_server < schema.sql
root@ubuntu:/usr/local/src/zabbix-4.2.4/database/mysql# mysql -uzabbix -p123456 -h192.168.184.148 zabbix_server < images.sql
root@ubuntu:/usr/local/src/zabbix-4.2.4/database/mysql# mysql -uzabbix -p123456 -h192.168.184.148 zabbix_server < data.sql
#確認數據庫內表已經生成
6.修改zabbix_server配置文件
root@ubuntu:~# vim /apps/zabbix_server/etc/zabbix_server.conf
DBHost=192.168.184.148
DBName=zabbix_server
DBUser=zabbix
DBPassword=123456
DBPort=3306
7.這時嘗試登陸,會提示不能使用root賬戶登陸
root@ubuntu:~# /apps/zabbix_server/sbin/zabbix_server -c /apps/zabbix_server/etc/zabbix_server.conf
zabbix_server [83451]: user zabbix does not exist
zabbix_server [83451]: cannot run as root!
創建zabbix用戶,把zabbix_server目錄的屬主和屬組都改成zabbix
root@ubuntu:~# useradd zabbix
root@ubuntu:~# chown zabbix.zabbix /apps/zabbix_server/ -R
root@ubuntu:~# ll /apps/
drwxr-xr-x 7 zabbix zabbix 4096 Jul 15 11:25 zabbix_server/
8.安裝zabbix web界面(把源碼包內的PHP文件拷貝到/var/www/html/目錄下即可)
root@ubuntu:/var/www/html# pwd
/var/www/html
root@ubuntu:/var/www/html# rm -rf index.html
root@ubuntu:/var/www/html# cp -a /usr/local/src/zabbix-4.2.4/frontends/php/* .
# 如果想要在web頁面訪問zabbix目錄開始安裝,就在/var/www/html/下創建一個zabbix目錄,把當前目錄下的文件拷貝進去
root@ubuntu:/var/www/html# mkdir zabbix
root@ubuntu:/var/www/html# mv ./* zabbix
#####
訪問web頁面,開始安裝前端
root@ubuntu:# apt-get install php-gettext php-xml php-net-socket php-gd php-mysql
root@ubuntu:~# vim /etc/php/7.2/apache2/php.ini
post_max_size = 16M
max_execution_time = 300
max_input_time = 300
date.timezone = Asia/Shanghai
root@ubuntu:~# systemctl restart apache2 #重啓Apache,刷新頁面,發現錯誤已經沒了
由於是編譯安裝,所以無法自動生成zabbix.conf.php文件,需要點擊下載,上傳到/var/www/html/zabbix/conf/目錄下
root@ubuntu:/var/www/html/zabbix/conf# ll
total 24
drwxr-xr-x 2 zabbix zabbix 4096 Jul 15 12:32 ./
drwxr-xr-x 10 root root 4096 Jul 15 12:13 ../
-rw-r--r-- 1 zabbix zabbix 163 Jun 26 23:22 .htaccess
-rw-r--r-- 1 zabbix zabbix 1036 Jun 26 23:22 maintenance.inc.php
-rw-r--r-- 1 root root 447 Jul 15 12:31 zabbix.conf.php
-rw-r--r-- 1 zabbix zabbix 741 Jun 26 23:22 zabbix.conf.php.example
上傳完成後,再次刷新頁面,就可以了
點擊finish就可以開始登陸,默認用戶Admin,密碼zabbix
設置編譯安裝zabbix支持中文
下載中文語言包
apt-get install language-pack-zh*
更改環境變量
vim /etc/environment
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh:en_US:en"
sudo dpkg-reconfigure locales #進行設置
設置字體,將字體文件上傳到/var/www/html/zabbix/assets/fonts/目錄下
root@ubuntu:# vim /var/www/html/zabbix/include/defines.inc.php
69 define('ZBX_GRAPH_FONT_NAME', 'simkai'); // font file name
110 define('ZBX_FONT_NAME', 'simkai');
#沒有啓動腳本時啓動zabbix_agent
root@ubuntu:~# /apps/zabbix_server/sbin/zabbix_agentd -c /apps/zabbix_server/etc/zabbix_agentd.conf
#啓動zabbix_server
root@ubuntu:~# /apps/zabbix_server/sbin/zabbix_server -c /apps/zabbix_server/etc/zabbix_server.conf
編寫zabbix_server啓動腳本
root@ubuntu:~# vim /lib/systemd/system/zabbix-server.service
[Unit]
Description=Zabbix Server
After=syslog.target
After=network.target
[Service]
Environment="CONFFILE=/apps/zabbix_server/etc/zabbix_server.conf"
EnvironmentFile=-/etc/default/zabbix-server
Type=forking
Restart=on-failure
PIDFile=/apps/zabbix_server/run/zabbix_server.pid #這裏的pid路徑要和zabbix_server裏的一樣
KillMode=control-group
ExecStart=/apps/zabbix_server/sbin/zabbix_server -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
TimeoutSec=infinity
[Install]
WantedBy=multi-user.target
~
編寫zabbix_agent啓動腳本
root@ubuntu:~# vim /lib/systemd/system/zabbix-agent.service
[Unit]
Description=Zabbix Agent
After=syslog.target
After=network.target
[Service]
Environment="CONFFILE=/apps/zabbix_server/etc/zabbix_agentd.conf"
EnvironmentFile=-/etc/default/zabbix-agent
Type=forking
Restart=on-failure
PIDFile=/apps/zabbix_server/run/zabbix_agentd.pid
KillMode=control-group
ExecStart=/apps/zabbix_server/sbin/zabbix_agentd -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
[Install]
WantedBy=multi-user.target
創建zabbix的日誌目錄
root@ubuntu:~# mkdir /apps/zabbix_server/logs/
root@ubuntu:~# chown zabbix.zabbix /apps/zabbix_server/logs/
#修改配置文件中日誌存放路徑,方便管理
root@ubuntu:~# vim /apps/zabbix_server/etc/zabbix_server.conf
LogFile=/apps/zabbix_server/logs/zabbix_server.log
root@ubuntu:~# vim /apps/zabbix_server/etc/zabbix_agentd.conf
LogFile=/apps/zabbix_server/logs/zabbix_agentd.log
Ubuntu設置中文支持
Ubuntu設置中文支持
下載中文語言包
apt-get install language-pack-zh*
更改環境變量
vim /etc/environment
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh:en_US:en"
sudo dpkg-reconfigure locales #進行設置
配置apt安裝的zabbix支持中文
#將字體配置文件上傳到服務器
/usr/share/zabbix/assets/fonts/
編輯配置文件,使用新字體
vim /usr/share/zabbix/include/defines.inc.php
69 define('ZBX_GRAPH_FONT_NAME', 'graphfont'); // font file name
110 define('ZBX_FONT_NAME', 'graphfont'); #把這兩行的graphfont更改爲新的字體文件名稱,不需要寫後綴ttf
#如果ttf是大寫的,需要修改爲小寫
zabbix依賴包 ***
apt-get install apache2 apache2-bin apache2-date apache2-utils fontconfig-config font
設置監控
IP | 服務 | |
---|---|---|
192.168.184.148 | zabbix_server | zabbix_server |
192.168.184.150 | zabbix_agent | zabbix_agent |
配置agent端
編譯安裝agent端
root@ubuntu:/usr/local/src/zabbix-4.2.4# pwd
/usr/local/src/zabbix-4.2.4
root@ubuntu:/usr/local/src/zabbix-4.2.4# ./configure --prefix=/apps/zabbix_agent --enable-agent
root@ubuntu:/usr/local/src/zabbix-4.2.4# make && make install
修改配置文件
root@ubuntu:/usr/local/src/zabbix-4.2.4# vim /apps/zabbix_agent/etc/zabbix_agentd.conf
Server=192.168.184.148 # zabbix_server 端的IP
Hostname=192.168.184.150 #本機IP
AllowRoot=1 #允許root啓動
User=root #設置啓動用戶爲root
PidFile=/apps/zabbix_agent/run/zabbix_agentd.pid
啓動zabbix_agent
root@ubuntu:# /apps/zabbix_agent/sbin/zabbix_agentd -c /apps/zabbix_agent/etc/zabbix_agentd.conf
在web頁面創建主機
添加模版
添加完成
編寫zabbix_agent啓動腳本
[Unit]
Description=Zabbix Agent
After=syslog.target
After=network.target
[Service]
Environment="CONFFILE=/apps/zabbix_agent/etc/zabbix_agentd.conf"
EnvironmentFile=-/etc/default/zabbix-agent
Type=forking
Restart=on-failure
PIDFile=/apps/zabbix_agent/run/zabbix_agentd.pid
KillMode=control-group
ExecStart=/apps/zabbix_agent/sbin/zabbix_agentd -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
[Install]
WantedBy=multi-user.target
可以使用zabbix_get命令測試監控,測試"agent.ping"返回1,就說明沒問題,除了1以外都不對
root@ubuntu:~# zabbix_get -s 192.168.184.150 -p 10050 -k "agent.ping"
1
監控Tomcat
IP | 系統 | |
---|---|---|
192.168.184.148 | zabbix_server、java-gateway | Ubuntu 1804 |
192.168.184.150 | tomcat | Ubuntu 1804 |
192.168.184.151 | java-gateway | Ubuntu 1804 |
1.安裝JDK環境
root@ubuntu:~# apt-get install openjdk-8-jdk
安裝Tomcat
root@ubuntu:/usr/local/src# tar xvf apache-tomcat-8.5.37.tar.gz -C /usr/local/
root@ubuntu:/usr/local/src# ln -s /usr/local/apache-tomcat-8.5.37/ /usr/local/tomcat
root@ubuntu:/usr/local/src# cd ../tomcat
root@ubuntu:/usr/local/tomcat# cat webapps/ROOT/index.html
haomeng test
修改配置
root@ubuntu:/usr/local/tomcat# vim bin/catalina.sh
CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote #啓用遠程監控JMX
-Dcom.sun.management.jmxremote.port=12345 #默認啓動的JMX端口號,要和zabbix添加主機時候的端
口一致即可
-Dcom.sun.management.jmxremote.authenticate=false #不使用用戶名密碼
-Dcom.sun.management.jmxremote.ssl=false #不使用ssl認證
-Djava.rmi.server.hostname=192.168.184.150" #tomcat主機自己的IP地址,不要寫zabbix服務器的地址
root@ubuntu:/usr/local/tomcat# ./bin/catalina.sh stop
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
root@ubuntu:/usr/local/tomcat# ./bin/catalina.sh start
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
#此處可以使用Windows JDK檢測配置情況,看到裏面有數據就OK(如圖一)
2.配置java-gateway
#編譯安裝時,java-gateway也被一起安裝到了目錄中
#在zabbix_server端
root@ubuntu:/apps/zabbix_server/sbin/zabbix_java# pwd
/apps/zabbix_server/sbin/zabbix_java
root@ubuntu:/apps/zabbix_server/sbin/zabbix_java# ll
total 28
drwxr-xr-x 4 zabbix zabbix 4096 Jul 15 16:16 ./
drwxr-xr-x 3 zabbix zabbix 4096 Jul 15 11:25 ../
drwxr-xr-x 2 zabbix zabbix 4096 Jul 15 11:25 bin/
drwxr-xr-x 2 zabbix zabbix 4096 Jul 15 11:25 lib/
-rw-r--r-- 1 zabbix zabbix 1084 Jul 15 16:16 settings.sh
-rwxr-xr-x 1 zabbix zabbix 545 Jul 15 11:25 shutdown.sh*
-rwxr-xr-x 1 zabbix zabbix 1800 Jul 15 11:25 startup.sh*
root@ubuntu:# vim /apps/zabbix_server/sbin/zabbix_java/settings.sh
LISTEN_IP="0.0.0.0"
LISTEN_PORT=10052
PID_FILE="/tmp/zabbix_java.pid"
START_POLLERS=10
TIMEOUT=30
******************
java-gateway不需要和zabbix_server裝在同一臺主機上,可以在其他主機,使用apt-get install zabbix-java-gateway 進行安裝
******************
啓動java-gateway
root@ubuntu:/apps/zabbix_server/sbin/zabbix_java# ./startup.sh
root@ubuntu:/apps/zabbix_server/sbin/zabbix_java# ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:10050 0.0.0.0:*
LISTEN 0 128 0.0.0.0:10051 0.0.0.0:*
LISTEN 0 80 0.0.0.0:3306 0.0.0.0:*
LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 50 *:10052 *:*
LISTEN 0 128 *:80 *:*
LISTEN 0 128 [::]:22 [::]:*
**************
***下面是不同主機使用apt安裝java-gateway
root@ubuntu:~# apt-get install zabbix-java-gateway
root@ubuntu:~# vim /etc/zabbix/zabbix_java_gateway.conf
LISTEN_IP="0.0.0.0"
LISTEN_PORT=10052
PID_FILE="/var/run/zabbix/zabbix_java_gateway.pid"
START_POLLERS=5
TIMEOUT=30
啓動java-gateway
root@ubuntu:~# systemctl start zabbix-java-gateway
#檢查是否監聽了10052端口
3.在zabbix_server上配置java-gateway
JavaGateway=192.168.184.148 #這裏使用的是相同主機的java-gateway
JavaGatewayPort=10052
StartJavaPollers=20
重啓zabbix_server
root@ubuntu:~# systemctl restart zabbix-server
在web頁面添加主機
圖一:
Tomcat配置監控完成後,如果web界面採集不到數據,可以在server端使用命令方式測試
命令行方式需要下載cmdline-jmxclient-0.10.3.jar
包
#查詢最大線程數
root@ubuntu:~# java -jar cmdline-jmxclient-0.10.3.jar - 192.168.184.150:12345 'Catalina:name="http-nio-8080",type=ThreadPool' maxThreads
07/17/2019 10:04:57 +0800 org.archive.jmx.Client maxThreads: 200
#查看當前線程數
root@ubuntu:~# java -jar cmdline-jmxclient-0.10.3.jar - 192.168.184.150:12345 'Catalina:name="http-nio-8080",type=ThreadPool' currentThreadCount
07/17/2019 10:05:30 +0800 org.archive.jmx.Client currentThreadCount: 10
#能夠返回數據,就說明監控tomcat沒有問題
監控nginx
主機 | IP | 服務 |
---|---|---|
zabbix-server | 192.168.184.148 | zabbix-server |
zabbix-nginx | 192.168.184.151 | zabbix-agent 、nginx |
#在新的主機上安裝zabbix_agent
#編譯安裝nginx
root@ubuntu:/usr/local/src# tar xvf nginx-1.14.2.tar.gz
root@ubuntu:/usr/local/src# cd nginx-1.14.2/
root@ubuntu:/usr/local/src/nginx-1.14.2#./configure --prefix=/apps/nginx/ --with-http_stub_status_module #必須添加這個模塊
root@ubuntu:/usr/local/src/nginx-1.14.2# make && make install
root@ubuntu:~# vim /apps/nginx/conf/nginx.conf
#添加下面幾行
location /nginx_status {
stub_status;
}
#測試nginx配置沒有問題
root@ubuntu:~# /apps/nginx/sbin/nginx -t
nginx: the configuration file /apps/nginx//conf/nginx.conf syntax is ok
nginx: configuration file /apps/nginx//conf/nginx.conf test is successful
root@ubuntu:~# /apps/nginx/sbin/nginx #啓動
到瀏覽器上訪問192.168.184.151/nginx_status
,能夠看到狀態信息
#編寫腳本,獲取nginx的狀態頁信息
root@ubuntu:/apps/zabbix_agent/etc/zabbix_agentd.conf.d# pwd
/apps/zabbix_agent/etc/zabbix_agentd.conf.d
root@ubuntu:/apps/zabbix_agent/etc/zabbix_agentd.conf.d# vim check_nginx.sh
#!/bin/bash
#
host=${2:-'127.0.0.1'}
port=${3:-'80'}
page=${4:-'nginx_status'}
info=$(/usr/bin/curl --connect-timeout 5 -s http://${host}:${port}/${page} 2>/dev/null)
code=$(/usr/bin/curl --connect-timeout 5 -o /dev/null -s -w %{http_code} http://${host}:${port}/${page})
proc=$(/usr/bin/pgrep nginx | wc -l)
case "$1" in
status)
echo "$code $proc" | awk '{code=$1}{proc=$2}END{if(code == "200" && proc != 0){printf("%d\n",1)}else{printf("%d\n",0)}}'
;;
active)
echo "$info" | awk '/^Active/{var=$NF}END{if(var~/^[0-9]+$/){printf("%d\n",var)}else{printf("%d\n",0)}}'
;;
reading)
echo "$info" | awk '/Reading/ {print $2}'
;;
writing)
echo "$info" | awk '/Writing/ {print $4}'
;;
waiting)
echo "$info" | awk '/Waiting/ {print $6}'
;;
accepts)
echo "$info" | awk 'NR==3 {print $1}'
;;
handled)
echo "$info" | awk 'NR==3 {print $2}'
;;
requests)
echo "$info" | awk 'NR==3 {print $3}'
;;
restimes)
echo "$info" | awk 'BEGIN{OFMT="%.3f"} NR==3 {print $4/$3}'
;;
*)
echo "ZBX_NOTSUPPORTED"
;;
esac
給腳本添加執行權限
root@ubuntu:/apps/zabbix_agent/etc/zabbix_agentd.conf.d# chmod a+x check_nginx.sh
修改zabbix-agent配置文件
root@ubuntu:/apps/zabbix_agent/etc/zabbix_agentd.conf.d# vim /apps/zabbix_agent/etc/zabbix_agentd.conf
UserParameter=nginx.status[*],/apps/zabbix_agent/etc/zabbix_agentd.conf.d/check_nginx.sh $1 $2
Include=/apps/zabbix_agent/etc/zabbix_agentd.conf.d/*.conf #腳本所在目錄
重啓zabbix-agent服務
root@ubuntu:/apps/zabbix_agent/etc/zabbix_agentd.conf.d# systemctl restart zabbix-agent
在web端添加自定義模板
#由於zabbix沒有監控nginx模版,所以我們需要自定義模版
1.創建模版
2.創建應用集
3.創建監控項
鍵值部分,填的就是zabbix-agent配置文件中UserParameter的key和腳本里的參數
4.創建圖形
創建完成後,只要和將主機與模版鏈接就可以使用了
在server端,可以使用zabbix_get命令檢測監控結果
zabbix proxy
主動模式與被動模式
- 是針對zabbix-agent端來說的,被動模式就是zabbix-server向zabbix-agent發送指令獲取數據,即zabbix-agent被動的去獲取數據並返回給zabbix-server。zabbix server週期性的向agent 索取數據,這種模式的最大問題就是會加大zabbix server的工作量,在數百臺服務器的環境下zabbix server不能及時獲取到最新數據,但這也是默認的工作方式。
- 主動模式是有zabbix agent主動採集數據並返回給zabbix server,不再需要zabbix serve進行干預,因此主動模式在一定程度上可減輕zabbix server的壓力。
當監控規模過大,就會給zabbix-server端帶來很大的壓力,這時,就需要用到zabbix-proxy代理來緩解壓力。
zabbix是一個分佈式的監控系統,支持通過代理服務器zabbix-proxy收集zabbix-agent的數據,然後把收集到的數據保存在本地數據庫,並統一發送給zabbix-server進行存儲和展示。
zabbix-proxy工作模式:
安裝zabbix-proxy
主機清單
系統 | IP | 服務 |
---|---|---|
Ubuntu | 192.168.184.148 | zabbix-server |
centos 7.6 | 192.168.184.144 | zabbix-proxy(被動)、MySQL |
centos7.6 | 192.168.184.143 | zabbix-proxy(主動) |
被動模式proxy
首先安裝依賴包
[root@t2 ~]# yum install gcc libxml2-devel net-snmp net-snmp-devel curl curl-devel php php-bcmath php-mbstring mariadb mariadb-devel java-1.8.0-openjdk-devel -y
準備數據庫
[root@t2 ~]# yum install mariadb-server
[root@t2 ~]# mysql
MariaDB [(none)]> create database zabbix_proxy character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix_proxy.* to proxy@'%' identified by '123456';
[root@t2 zabbix-4.2.4]# ./configure --prefix=/apps/zabbix_proxy/ --enable-proxy --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --enable-java
[root@t2 zabbix-4.2.4]# make && make install
導入數據庫
[root@t2 zabbix-4.2.4]# mysql -uproxy -p123456 -h 192.168.184.144 zabbix_proxy < database/mysql/schema.sql
配置zabbix-proxy
[root@t2 ~]# grep "^[a-Z]" /apps/zabbix_proxy/etc/zabbix_proxy.conf
ProxyMode=1 #0爲主動,1爲被動
Server=192.168.184.148 #zabbix server服務器的地址或主機名
Hostname=zabbix-proxy-test1 # 代理服務器名稱,需要與zabbix server添加代理時proxy name一致
LogFile=/tmp/zabbix_proxy.log
DBHost=192.168.184.144 #數據庫服務器地址
DBName=zabbix_proxy #數據庫名稱
DBUser=proxy #連接數據庫用戶名
DBPassword=123456 #數據庫用戶密碼
DBPort=3306 #數據庫端口
ProxyLocalBuffer=3 #已經提交到zabbix server的數據保留時間
ProxyOfflineBuffer=24 #未提交到zabbix server的數據保留時間
HeartbeatFrequency=60 #心跳間隔檢測時間,默認1秒,範圍1-3600秒,被動模式不使用
ConfigFrequency=5 #間隔多久從zabbix server獲取監控信息
DataSenderFrequency=5 數據發送時間間隔,默認爲1秒,範圍爲1-3600秒,被動模式不使用
StartPollers=20 #啓動的數據採集器數量
JavaGateway=192.168.184.144 #JavaGateway服務器地址,監控java時需要配置
JavaGatewayPort=10052 #JavaGAteway服務端口
StartJavaPollers=20 #啓動多少個線程採集數據
CacheSize=100M #保存監控項而佔用的最大內存
HistoryCacheSize=100M #保存監控歷史數據佔用的最大內存
Timeout=30 #監控超時時間,單位爲秒
LogSlowQueries=3000 #毫秒,多久的數據庫查詢會被記錄到日誌
StatsAllowedIP=127.0.0.1
配置agent(proxy與agent不一定要在同一臺主機)
[root@t2 ~]# grep "^[a-Z]" /apps/zabbix_proxy/etc/zabbix_agentd.conf
LogFile=/tmp/zabbix_agentd.log
DebugLevel=4
Server=192.168.184.148,192.168.184.144
ListenPort=10050
ListenIP=0.0.0.0
StartAgents=3
ServerActive=192.168.184.148
Hostname=192.168.184.144
Timeout=30
UnsafeUserParameters=1
啓動服務
[root@t2 ~]# /apps/zabbix_proxy/sbin/zabbix_proxy -c /apps/zabbix_proxy/etc/zabbix_proxy.conf
[root@t2 ~]# /apps/zabbix_proxy/sbin/zabbix_agentd -c /apps/zabbix_proxy/etc/zabbix_agentd.conf
添加被動代理
添加被動模式主機
驗證數據,此過程需要一段時間,在zabbix server,zabbix proxy,zabbix agent 沒有報錯的情況下,需要耐心等待
主動模式proxy
在192.168.184.143上部署zabbix proxy 主動模式
[root@zabbix-proxy-z ~]# yum install gcc libxml2-devel net-snmp net-snmp-devel curl curl-devel php php-bcmath php-mbstring mariadb mariadb-devel java-1.8.0-openjdk-devel -y
準備數據庫
[root@zabbix-proxy-z ~]# yum install mariadb-server
[root@zabbix-proxy-z ~]# mysql
MariaDB [(none)]> create database zabbix_proxy character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix_proxy_zhu.* to proxy@'%' identified by '123456';
[root@zabbix-proxy-z zabbix-4.2.4]# ./configure --prefix=/apps/zabbix_proxy/ --enable-proxy --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --enable-java
[root@zabbix-proxy-z zabbix-4.2.4]# make && make install
導入數據庫
[root@zabbix-proxy-z zabbix-4.2.4]# mysql -uproxy -p123456 -h 192.168.184.144 zabbix_proxy_zhu < database/mysql/schema.sql
配置zabbix proxy
[root@zabbix-proxy-z ~]# grep "^[a-Z]" /apps/zabbix_proxy/etc/zabbix_proxy.conf
ProxyMode=0
Server=192.168.184.148
Hostname=zabbix-proxy-test2
LogFile=/tmp/zabbix_proxy.log
DBHost=192.168.184.144
DBName=zabbix_proxy_zhu
DBUser=proxy
DBPassword=123456
DBPort=3306
ProxyLocalBuffer=3
ProxyOfflineBuffer=24
HeartbeatFrequency=60
ConfigFrequency=5
DataSenderFrequency=5
StartPollers=20
JavaGateway=192.168.184.144
JavaGatewayPort=10052
StartJavaPollers=20
CacheSize=100M
HistoryCacheSize=100M
Timeout=30
LogSlowQueries=3000
配置zabbix agent
[root@zabbix-proxy-z ~]# grep "^[a-Z]" /apps/zabbix_proxy/etc/zabbix_agentd.conf
LogFile=/tmp/zabbix_agentd.log
DebugLevel=4
Server=192.168.184.148,192.168.184.143
ListenPort=10050
ListenIP=0.0.0.0
StartAgents=3
ServerActive=192.168.184.148,192.168.184.143
Hostname=192.168.184.143
Timeout=30
UnsafeUserParameters=1
啓動服務
[root@zabbix-proxy-z ~]# /apps/zabbix_proxy/sbin/zabbix_proxy -c /apps/zabbix_proxy/etc/zabbix_proxy.conf
[root@zabbix-proxy-z ~]# /apps/zabbix_proxy/sbin/zabbix_agentd -c /apps/zabbix_proxy/etc/zabbix_agentd.conf
添加主動代理
添加主動模式主機
在監控項部分,更改客戶端爲主動模式
驗證數據
主動模式監控Tomcat
系統 | IP | 服務 |
---|---|---|
Ubuntu1810 | 192.168.184.148 | zabbix server 、java-gateway |
centos7.6 | 192.168.184.143 | zabbix proxy 、Tomcat 、openjdk1.8.0_212 |
在192.168.184.143上安裝jdk和tomcat
[root@zabbix-proxy-z ]# yum install java-1.8.0-openjdk
[root@zabbix-proxy-z ]# tar xvf apache-tomcat-8.5.37.tar.gz -C /apps/
添加配置
[root@zabbix-proxy-z apps]# vim /apps/apache-tomcat-8.5.37/bin/catalina.sh
CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=192.168.184.143"
啓動Tomcat
[root@zabbix-proxy-z apps]# /apps/apache-tomcat-8.5.37/bin/catalina.sh start
在zabbix控制檯指定主機添加jmx監控
關聯模版
驗證監控數據
監控TCP連接數
1.創建獲取數據的腳本
[root@zabbix-proxy-z zabbix_agentd.conf.d]# cat tcp_conn.sh
#!/bin/bash
tcp_conn_status(){
TCP_STAT=$1
ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}' > /tmp/tcp_conn.txt
TCP_STAT_VALUE=$(grep "$TCP_STAT" /tmp/tcp_conn.txt | cut -d ' ' -f2)
if [ -z $TCP_STAT_VALUE ];then
TCP_STAT_VALUE=0
fi
echo $TCP_STAT_VALUE
}
main(){
case $1 in
tcp_status)
tcp_conn_status $2;
;;
*)
echo "$0 + tcp_status + STATUS"
esac
}
main $1 $2
2.添加執行權限
[root@zabbix-proxy-z zabbix_agentd.conf.d]# chmod a+x tcp_conn.sh
3.創建conf文件引用腳本
[root@zabbix-proxy-z ~]# vim /apps/zabbix_proxy/etc/zabbix_agentd.conf.d/ all.conf
UserParameter=linux_status[*],/apps/zabbix_proxy/etc/zabbix_agentd.conf.d/tcp_conn.sh "$1" "$2"
或者
[root@zabbix-proxy-z ~]# vim /apps/zabbix_proxy/etc/zabbix_agentd.conf
UserParameter=linux_status[*],/apps/zabbix_proxy/etc/zabbix_agentd.conf.d/tcp_conn.sh "$1" "$2"
Include=/apps/zabbix_proxy/etc/zabbix_agentd.conf.d/*.conf #配置agent配置文件導入自定義的配置文件
重啓agent服務
[root@zabbix-proxy-z ~]# pkill zabbix_agent
[root@zabbix-proxy-z ~]# /apps/zabbix_proxy/sbin/zabbix_agentd -c /apps/zabbix_proxy/etc/zabbix_agentd.conf
由於沒有寫service啓動腳本,所以使用這種方式重啓服務
在被監控端爲zabbix用戶授權
[root@zabbix-proxy-z ~]# vim /etc/sudoers
99 zabbix ALL =(ALL) NOPASSWD: ALL
在zabbix server上測試獲取數據
中間出現了權限的錯誤
這是由於/tmp下的臨時文件tcp_conn.txt的屬主是root,所以會報權限錯誤。可以選擇把tcp_conn.txt的屬主改成zabbix,或者刪除文件,讓它重新生成
導入並關聯模版
驗證連接數據
監控memcache
系統 | IP | 服務 |
---|---|---|
centos7.6 | 192.168.184.143 | memcached |
安裝並啓動memcached
[root@zabbix-proxy-z ~]# yum install memcached
[root@zabbix-proxy-z ~]# systemctl start memcached
編寫監控腳本
[root@zabbix-proxy-z zabbix_agentd.conf.d]# pwd
/apps/zabbix_proxy/etc/zabbix_agentd.conf.d
[root@zabbix-proxy-z zabbix_agentd.conf.d]# vim memcached.sh
#!/bin/bash
memcached_status(){
M_PORT=$1
M_COMMAND=$2
echo -e "stats\nquit" |nc 127.0.0.1 "$M_PORT" | grep "STAT $M_COMMAND" |awk '{print $3}'
}
main(){
case $1 in
memcached_status)
memcached_status $2 $3
;;
esac
}
main $1 $2 $3
添加執行權限
[root@zabbix-proxy-z zabbix_agentd.conf.d]# chown zabbix.zabbix memcached.sh
修改屬主和屬組
[root@zabbix-proxy-z zabbix_agentd.conf.d]# chmod +x memcached.sh
配置agent文件調用腳本
[root@zabbix-proxy-z ~]# vim /apps/zabbix_proxy/etc/zabbix_agentd.conf
UserParameter=memcached_status[*],/apps/zabbix_proxy/etc/zabbix_agentd.conf.d/memcached.sh "$1" "$2" "$3"
重啓agent
[root@zabbix-proxy-z ]# pkill zabbix_agent
[root@zabbix-proxy-z ]# /apps/zabbix_proxy/sbin/zabbix_agentd -c /apps/zabbix_proxy/etc/zabbix_agentd.conf
在 zabbix server端導入模版(或手動創建)
關聯主機並驗證數據
監控redis
系統 | IP | 服務 |
---|---|---|
Ubuntu1810 | 192.168.184.148 | zabbix server |
centos7.6 | 192.168.184.143 | redis |
安裝部署redis
[root@zabbix-proxy-z ~]# yum install epel-release -y
[root@zabbix-proxy-z ~]# yum install redis -y
[root@zabbix-proxy-z ~]# vim /etc/redis.conf
bind 0.0.0.0
[root@zabbix-proxy-z ~]# systemctl start redis
編寫監控redis腳本
#!/bin/bash
redis_status(){
R_PORT=$1
R_COMMAND=$2
(echo -en "INFO \r\n";sleep 1;) | nc 127.0.0.1 "$R_PORT" > /tmp/redis_"$R_PORT".tmp
REDIS_STAT_VALUE=$(grep ""$R_COMMAND":" /tmp/redis_"$R_PORT".tmp | cut -d ':' -f2)
echo $REDIS_STAT_VALUE
}
help(){
echo "${0} + redis_status + PORT + COMMAND"
}
main(){
case $1 in
redis_status)
redis_status $2 $3
;;
*)
help
;;
esac
}
main $1 $2 $3
添加執行權限
[root@zabbix-proxy-z zabbix_agentd.conf.d]# chmod +x redis_status.sh
測試能否獲取數據
[root@zabbix-proxy-z zabbix_agentd.conf.d]# bash redis_status.sh redis_status 6379 total_net_output_bytes
43484
修改zabbix agent配置文件
[root@zabbix-proxy-z zabbix_agentd.conf.d]# vim /apps/zabbix_proxy/etc/zabbix_agentd.conf
UserParameter=redis_status[*],/apps/zabbix_proxy/etc/zabbix_agentd.conf.d/redis_status.sh "$1" "$2" "$3"
在zabbix server端進行測試(這時在/tmp/目錄下會生成一個redis_6379.tmp文件,所有者與所有組都是root,需要將其刪除,或者將所有者所有組改成zabbix,否則在zabbix server端測試會報權限錯誤)
[root@zabbix-proxy-z zabbix_agentd.conf.d]# ll /tmp/
-rw-r--r-- 1 root root 2141 Jul 24 10:53 redis_6379.tmp #刪除這個文件,或者改所有者所有組
[root@zabbix-proxy-z zabbix_agentd.conf.d]# rm -rf /tmp/redis_6379.tmp
在zabbix server端驗證腳本
root@zabbix-server:~# zabbix_get -s 192.168.184.143 -p 10050 -k "redis_status[redis_status,6379,used_memory_lua_human]"
37.00K
在server端創建監控模版
創建監控項
創建圖形
關聯到主機並驗證數據
zabbix實現nginx故障自治癒
系統 | IP | 服務 |
---|---|---|
Ubuntu1810 | 192.168.184.148 | zabbix server |
centos | 192.168.184.143 | nginx |
安裝部署nginx
[root@zabbix-proxy-z ~]# yum install nginx -y
[root@zabbix-proxy-z ~]# vim /etc/nginx/nginx.conf
location /nginx_status {
stub_status;
allow 127.0.0.1;
deny all;
}
啓動服務
[root@zabbix-proxy-z ~]# systemctl start nginx
編寫nginx監控腳本
[root@zabbix-proxy-z zabbix_agentd.conf.d]# cat nginx_status.sh
#!/bin/bash
nginx_status_fun(){ #函數內容
NGINX_PORT=$1 #端口,函數的第一個參數是腳本的第二個參數,即腳本的第二個參數是段端口號
NGINX_COMMAND=$2 #命令,函數的第二個參數是腳本的第三個參數,即腳本的第三個參數是命令
nginx_active(){ #獲取nginx_active數量,以下相同,這是開啓了nginx狀態但是隻能從本機看到
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
nginx_reading(){ #獲取nginx_reading狀態的數量
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
nginx_writing(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
nginx_waiting(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
nginx_accepts(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
nginx_handled(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
nginx_requests(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
}
case $NGINX_COMMAND in
active)
nginx_active;
;;
reading)
nginx_reading;
;;
writing)
nginx_writing;
;;
waiting)
nginx_waiting;
;;
accepts)
nginx_accepts;
;;
handled)
nginx_handled;
;;
requests)
nginx_requests;
esac
}
main(){ #主函數內容
case $1 in #分支結構,用於判斷用戶的輸入而進行響應的操作
nginx_status) #當輸入nginx_status就調用nginx_status_fun,並傳遞第二和第三個參數
nginx_status_fun $2 $3;
;;
*) #其他的輸入打印幫助信息
echo $"Usage: $0 {nginx_status key}"
esac #分支結束符
}
main $1 $2 $3
配置zabbix agent 配置文件
[root@zabbix-proxy-z zabbix_agentd.conf.d]# vim /apps/zabbix_proxy/etc/zabbix_agentd.conf
UserParameter=nginx.status[*],/apps/zabbix_proxy/etc/zabbix_agentd.conf.d/nginx_status.sh "$1" "$2" "$3"
重啓zabbix agent
[root@zabbix-proxy-z zabbix_agentd.conf.d]# pkill zabbix_agent
[root@zabbix-proxy-z zabbix_agentd.conf.d]# /apps/zabbix_proxy/sbin/zabbix_agentd -c /apps/zabbix_proxy/etc/zabbix_agentd.conf
server端測試驗證
root@zabbix-server:~# zabbix_get -s 192.168.184.143 -p 10050 -k "nginx.status[nginx_status,80,requests]"
11667
server端導入模版
關聯模版到主機,並驗證數據
設置郵件報警
創建報警媒介類型
這裏的密碼指的是郵箱的smtp授權碼,需要到郵箱裏打開
打開smtp服務,然後生成授權碼,就是第三方客戶端登錄時的密碼
配置動作
配置故障具體操作
定義恢復內容
添加用戶報警媒介
測試關閉192.168.184.143的80端口,zabbix則會發送郵件報警
重新開啓80端口時,同樣會發送郵件提醒
實現分級報警
創建一個新的用戶,並設置媒介類型,以及權限
添加動作,設置分級報警
再次關閉80端口測試
(兩個郵箱都收到了報警)
打開80端口
實現nginx自治癒
創建nginx自治癒動作
對zabbix agent進行配置
[root@zabbix-proxy-z ~]# vim /apps/zabbix_proxy/etc/zabbix_agentd.conf
EnableRemoteCommands=1 #允許遠程命令
UnsafeUserParameters=1 #允許特殊字符
給zabbix用戶添加sudo權限,設置nopasswd
[root@zabbix-proxy-z ~]# vim /etc/sudoers
zabbix ALL=(ALL) NOPASSWD:ALL
重啓zabbix agent
[root@zabbix-proxy-z ~]# pkill zabbix_agent
[root@zabbix-proxy-z ~]# /apps/zabbix_proxy/sbin/zabbix_agentd -c /apps/zabbix_proxy/etc/zabbix_agentd.conf
停止nginx服務進行測試
zabbix 監控到80端口關閉後,認爲nginx服務不存在,zabbix用戶自動開啓了nginx服務
SNMP協議
SNMP是英文“Simple Network Management Protocol”的縮寫,中文意思是“簡單網絡管理協議,SNMP是一種簡單網 絡管理協議,它屬於TCP/IP五層協議中的應用層協議,用於網絡管理的協議,SNMP主要用於網絡設備的管理。
SNMP的基本思想:爲不同種類的設備、不同廠家生產的設備、不同型號的設備,定義爲一個統一的接口和協議,使 得管理員可以是使用統一的外觀面對這些需要管理的網絡設備進行管理。通過網絡,管理員可以管理位於不同物理空 間的設備,從而大大提高網絡管理的效率,簡化網絡管理員的工作。
SNMP協議是TCP/IP協議簇的一個應用層協議,在1988年被制定,並被Internet體系結構委員會(IAB)採納作爲一個 短期的網絡管理解決方案,由於SNMP的簡單性,在Internet時代得到了蓬勃的發展,1992年發佈了SNMPv2版本,以 增強SNMPv1的安全性和功能,SNMP的協議版本目前有SNMP v1、SNMP v2c和SNMP v3三種版本,其具體差別如下:
-
SNMP v1採用團體名(Community Name)認證,團體名用來定義SNMP NMS和SNMP Agent的關係,如果SNMP報文攜帶的團體 名沒有得到設備的認可,該報文將被丟棄,團體名起到了類似於密碼的作用,用來限制SNMP NMS對SNMP Agent的訪問。
- SNMP v2c也採用團體名認證,它在兼容SNMP v1的同時又擴充了SNMP v1的功能,它提供了更多的操作類型(GetBulk和InformRequest)、支持更多的數據類型(Counter64等)、提供了更豐富的錯誤代碼且能夠更細緻地區分錯誤。
- SNMP v3提供了基於用戶的安全模型(USM,User-Based Security Model)的認證機制,用戶可以設置認證和加密功能,認證用於 驗證報文發送方的合法性,避免非法用戶的訪問,加密則是對NMS和Agent之間的傳輸報文進行加密,以免被竊聽。通過有無認證和有無加密等功能組合,可以爲SNMP NMS和SNMP Agent之間的通信提供更高的安全性。
SNMP工作機制
SNMP的工作機制SNMP網絡元素分爲NMS和Agent兩種:
- NMS(Network Management Station,網絡管理站)是運行SNMP客戶端程序的工作站,能夠提供非常友好的人機交互界面,方便 網絡管理員完成絕大多數的網絡管理工作。
- Agent是駐留在設備上的一個進程,負責接收、處理來自NMS的請求報文。在一些緊急情況下,如接口狀態發生改變等,Agent 也會主動通知NMS。
- NMS是SNMP網絡的管理者,Agent是SNMP網絡的被管理者。NMS和Agent之間通過SNMP協議來交互管理信息。
SNMP數據交互
SNMP管理進程與代理進程之前爲了交互信息,定義了5種報文:
- get-request操作:從代理進程處提取一個或多個參數值。
- get-next-request操作:從代理進程處提取一個或多個參數的下一個參數值。
- set-request操作:設置代理進程的一個或多個參數值。
- get-response操作:返回的一個或多個參數值。這個操作是由代理進程發出的。
- trap操作:代理進程主動發出的報文,通知管理進程有某些事情發生。
SNMP組織結構
一套完整的SNMP系統主要包括以下幾個方面:
- SNMP報文協議
- 管理信息機構(SMI, Structure ofManagement Information),一套公用的結構和表示符號。)
- 管理信息庫(MIB,Management Information Base),管理信息庫包含所有代理進程的所有可被查詢和修改的參數。
- OID(Object Identifiers),一個OID是一個唯一的鍵值對,用於標識具體某一個設備的某個具體信息(對象標識), 如端口信息、設備名稱等。
SNMP MIB
所謂(MIB)管理信息庫,就是所有代理進程包含的、並且能夠被管理進程進行查詢和設置的信息的集合。MIB是基於 對象標識樹的,對象標識是一個整數序列,中間以"."分割,這些整數構成一個樹型結構,類似於 D N S或U n i x的文 件系統,M I B被劃分爲若干個組,如s y s t e m、 i n t e r f a c e s、 a t(地址轉換)和i p組等。i s o . o r g . d o d . i n t e r n e t .p r i v a t e . e n t e r p r i s e s( 1 . 3 . 6 . 1 . 4 . 1)這個標識,是給廠家自定義而預留的,比如華爲的爲1.3.6.1.4.1.2011, 華三的爲1.3.6.1.4.1.25506。
SNMP OID
Centos 部分常用的OID:
CPU負載 | 1 minute Load: .1.3.6.1.4.1.2021.10.1.3.1 |
---|---|
5 minute Load: .1.3.6.1.4.1.2021.10.1.3.2 | |
15 minute Load: .1.3.6.1.4.1.2021.10.1.3.3 | |
CPU信息 | percentage of user CPU time: .1.3.6.1.4.1.2021.11.9.0 |
raw user cpu time: .1.3.6.1.4.1.2021.11.50.0 | |
percentages of system CPU time: .1.3.6.1.4.1.2021.11.10.0 | |
raw system cpu time: .1.3.6.1.4.1.2021.11.52.0 | |
percentages of idle CPU time: .1.3.6.1.4.1.2021.11.11.0 | |
raw idle cpu time: .1.3.6.1.4.1.2021.11.53.0 | |
raw nice cpu time: .1.3.6.1.4.1.2021.11.51.0 | |
系統信息 | sysDescr 1.3.6.1.2.1.1.1 |
sysObjectID 1.3.6.1.2.1.1.2 | |
sysUpTime 1.3.6.1.2.1.1.3 | |
sysContact 1.3.6.1.2.1.1.4 | |
sysName 1.3.6.1.2.1.1.5 | |
內存使用 | Total Swap Size: .1.3.6.1.4.1.2021.4.3.0 |
Available Swap Space: .1.3.6.1.4.1.2021.4.4.0 | |
Total RAM in machine: .1.3.6.1.4.1.2021.4.5.0 | |
Total RAM used: .1.3.6.1.4.1.2021.4.6.0 | |
Total RAM Free: .1.3.6.1.4.1.2021.4.11.0 | |
Total RAM Shared: .1.3.6.1.4.1.2021.4.13.0 | |
Total RAM Buffered: .1.3.6.1.4.1.2021.4.14.0 | |
Total Cached Memory: .1.3.6.1.4.1.2021.4.15.0 | |
硬盤使用 | Path where the disk is mounted: .1.3.6.1.4.1.2021.9.1.2.1 |
Path of the device for the partition: .1.3.6.1.4.1.2021.9.1.3.1 | |
Total size of the disk/partion (kBytes): .1.3.6.1.4.1.2021.9.1.6.1 | |
Available space on the disk: .1.3.6.1.4.1.2021.9.1.7.1 | |
Used space on the disk: .1.3.6.1.4.1.2021.9.1.8.1 | |
Percentage of space used on disk: .1.3.6.1.4.1.2021.9.1.9.1 | |
Percentage of inodes used on disk: .1.3.6.1.4.1.2021.9.1.10.1 |
如何測試OID:
snmpwalk是SNMP的一個工具,它使用SNMP的GET請求查詢指定OID(SNMP協議中的對象標識)入口的所有OID樹信息,並顯示給用戶。通過snmpwalk也可以查看支持SNMP協議(可網管)的設備的一些其他信息,比如cisco交換機或路由器IP地址、內存使用率等,也可用來協助開發SNMP功能。
要使用snmpwalk需要先安裝net-snmp軟件包
[root@s1 ~]# yum -y install net-snmp-utils
[root@s1 ~]# snmpwalk -h
USAGE: snmpwalk [OPTIONS] AGENT [OID]
–h:顯示幫助。
–v:指定snmp的版本, 1或者2c或者3。
–c:指定連接設備SNMP密碼。
–V:顯示當前snmpwalk命令行版本。
–r:指定重試次數,默認爲0次。
–t:指定每次請求的等待超時時間,單爲秒,默認爲3秒。
–l:指定安全級別:noAuthNoPriv|authNoPriv|authPriv。
–a:驗證協議:MD5|SHA。只有-l指定爲authNoPriv或authPriv時才需要。
–A:驗證字符串。只有-l指定爲authNoPriv或authPriv時才需要。
–x:加密協議:DES。只有-l指定爲authPriv時才需要。
–X:加密字符串。只有-l指定爲authPriv時才需要。
模擬使用snmp協議監控網絡設備
系統 | IP | 服務 |
---|---|---|
Ubuntu | 192.168.184.148 | zabbix server |
centos | 192.168.184.146 | 網絡設備 |
在192.168.184.146主機上
安裝snmp包,將192.168.184.146作爲網絡設備
[root@snmp ~]# yum install net-snmp -y
[root@snmp ~]# vim /etc/snmp/snmpd.conf
com2sec notConfigUser default 123456 #設置團體認證,默認爲public
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser #將團體名稱notConfigUser關聯至組notConfigGroup
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1
view systemview included .1.3.6. 創建view,並對其授權可訪問的OID範圍
access notConfigGroup "" any noauth exact systemview none none #將組notConfigGroup關聯至systemview 從而完成組的授權
啓動服務
[root@snmp ~]# systemctl restart snmpd
[root@snmp ~]# systemctl enable snmpd
Created symlink from /etc/systemd/system/multi-user.target.wants/snmpd.service to /usr/lib/systemd/system/snmpd.service.
[root@snmp ~]# ss -unl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 *:161 *:*
UNCONN 0 0 *:60608 *:*
UNCONN 0 0 *:68 *:*
UNCONN 0 0 :::33848 :::*
在zabbix server端測試能否通過SNMOP採集數據:
root@zabbix-server:~# snmpwalk -v 2c -c 123456 192.168.184.146 .1.3.6.1.4.1.2021.10.1.3.1
iso.3.6.1.4.1.2021.10.1.3.1 = STRING: "0.00"
root@zabbix-server:~# snmpwalk -v 2c -c 123456 192.168.184.146 .1.3.6.1.4.1.2021.10.1.3.2
iso.3.6.1.4.1.2021.10.1.3.2 = STRING: "0.01"
在server上創建主機
關聯模版
由於前面我們修改了團體認證爲123456,所以需要在server上把團體認證改成一樣
驗證監控數據
監控MySQL
系統 | IP | 服務 |
---|---|---|
Ubuntu1810 | 192.168.184.148 | zabbix server |
centos7.6 | 192.168.184.144 | MySQL master |
centos7.6 | 192.168.184.143 | MySQL slave |
部署MySQL主從
部署MySQL主從
1.配置MySQL master
[root@t2 yum.repos.d]# vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
server-id=10
log-bin=/data/mysql/master-log
2.重啓MySQL
[root@t2~]# systemctl restart mariadb
3.創建複製用戶
MariaDB [(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'rsync-user'@'192.168.184.%' IDENTIFIED BY '123456';
4.完全備份數據
[root@t2~]# mysqldump --all-databases --single_transaction --flush-logs --master-data=2 --lock-tables > /opt/backup.sql
5.將備份數據拷貝到slave上
[root@t2 ~]# scp /opt/backup.sql 192.168.184.146:/root/backup.sql
6.查看二進制日誌位置
MariaDB [(none)]> show master logs;
+-------------------+-----------+
| Log_name | File_size |
+-------------------+-----------+
| master-log.000001 | 410490 |
| master-log.000002 | 578037 |
| master-log.000003 | 4772456 |
+-------------------+-----------+
7.配置MySQL slave
[root@zabbix-proxy-z ~]# vim /etc/my.cnf
[mysqld]
server-id=21
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
8.啓動MySQL
[root@zabbix-proxy-z ~]# systemctl start mariadb
9.導入master的數據
MariaDB [(none)]> source backup.sql
10.配置同步信息
MariaDB [(none)]>CHANGE MASTER TO
MASTER_HOST='192.168.184.144',
MASTER_USER='rsync-user',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='master-log.000003',
MASTER_LOG_POS=4772456;
11.啓動複製
MariaDB [(none)]> start slave;
12.確認複製狀態
MariaDB [zabbix_proxy_zhu]> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.184.144
Master_User: rsync-user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-log.000003
Read_Master_Log_Pos: 5378824
Relay_Log_File: mariadb-relay-bin.000002
Relay_Log_Pos: 606902
Relay_Master_Log_File: master-log.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
使用percona監控MySQL
安裝部署percona
1.官方文檔及下載地址:
https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html #插件地址
https://www.percona.com/downloads/ #下載地址
https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html#installation-instructions #安裝教程
2.本地安裝部署
[root@zabbix-proxy-z ~]#yum install php php-mysql -y #安裝php環境
3.安裝模版文件
[root@zabbix-proxy-z ~]#wget https://www.percona.com/downloads/percona-monitoring-plugins/percona-monitoring-plugins-1.1.8/binary/redhat/7/x86_64/percona-zabbix-templates-1.1.8-1.noarch.rpm
[root@zabbix-proxy-z ~]#rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm
4.拷貝配置文件
[root@zabbix-proxy-z ~]#cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /apps/zabbix_proxy/etc/zabbix_agentd.conf.d/
5.修改zabbix agent配置文件
[root@zabbix-proxy-z ~]# vim /apps/zabbix_proxy/etc/zabbix_agentd.conf
Include=/apps/zabbix_proxy/etc/zabbix_agentd.conf.d/*.conf
6.重啓zabbix agent
[root@zabbix-proxy-z ~]# systemctl restart zabbix-agent
7.創建ss_get_mysql_stats.php.cnf文件,配置連接mysql用戶和密碼
[root@zabbix-proxy-z ~]# cat /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php.cnf
<?php
$mysql_user = 'root';
$mysql_pass = ''; #由於我的MySQL沒有設置密碼,故不填
8.測試數據
[root@zabbix-proxy-z ~]# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
5630
注:能夠獲取到數據就代表正常,也可以在server端使用zabbix_get測試。
如果無法獲取數據,就要查看/tmp目錄下是否有一個localhost-mysql_cacti_stats.txt文件,有的話就將其權限改爲zabbix用戶和組
[root@zabbix-proxy-z ~]# chown zabbix.zabbix /tmp/localhost-mysql_cacti_stats.txt
root@zabbix-server:~# zabbix_get -s 192.168.184.143 -p 10050 -k "MySQL.Key-read-requests"
5630
在server上導入模板 zbx_mysql_export_templates.xml,更改模版模式爲主動模式,關聯到主機
驗證數據:
自定義監控數據庫
1.編寫監控MySQL腳本
[root@zabbix-proxy-z zabbix_agentd.conf.d]# pwd
/apps/zabbix_proxy/etc/zabbix_agentd.conf.d
[root@zabbix-proxy-z zabbix_agentd.conf.d]# cat mysql_monitor.sh
#!/bin/bash
Seconds_Behind_Master(){
NUM=`mysql -uroot -hlocalhost -e "show slave status\G;" | grep "Seconds_Behind_Master:" | awk -F: '{print $2}'`
echo $NUM
}
master_slave_check(){
NUM1=`mysql -uroot -hlocalhost -e "show slave status\G;" | grep "Slave_IO_Running" | awk -F: '{print $2}' | sed 's/^[ \t]*//g'`
#echo $NUM1
NUM2=`mysql -uroot -hlocalhost -e "show slave status\G;" | grep "Slave_SQL_Running:" | awk -F: '{print $2}' | sed 's/^[ \t]*//g'`
#echo $NUM2
if test $NUM1 == "Yes" && test $NUM2 == "Yes";then
echo 50
else
echo 100
fi
}
main(){
case $1 in
Seconds_Behind_Master)
Seconds_Behind_Master;
;;
master_slave_check)
master_slave_check
;;
esac
}
main $1
導入自定義配置
[root@zabbix-proxy-z ~]# vim /apps/zabbix_proxy/etc/zabbix_agentd.conf
Include=/apps/zabbix_proxy/etc/zabbix_agentd.conf.d/*.conf
自定義監控項
[root@zabbix-proxy-z zabbix_agentd.conf.d]# cat mysql_monitor.conf
UserParameter=mysql_monitor[*],/apps/zabbix_proxy/etc/zabbix_agentd.conf.d/mysql_monitor.sh $1
測試腳本,當slave複製開啓時,獲取到的值爲50,停止時爲100
#start slave;
[root@zabbix-proxy-z zabbix_agentd.conf.d]# bash mysql_monitor.sh master_slave_check
50
#stop slave;
[root@zabbix-proxy-z zabbix_agentd.conf.d]# bash mysql_monitor.sh master_slave_check
100
在server上使用zabbix_get測試
root@zabbix-server:~# zabbix_get -s 192.168.184.143 -p 10050 -k "mysql_monitor[master_slave_check]"
100
確認無誤後,重啓zabbix-agent
[root@zabbix-proxy-z]# systemctl restart zabbix-agent
在server上創建監控模版
添加監控項
關聯主機
創建圖形
創建觸發器
驗證數據
添加動作
當slave複製停止時,zabbix 會檢測到,並且發送郵件報警
MySQL主從同步自治癒
添加動作
添加操作
手段停止複製進行測試
[root@zabbix-proxy-z zabbix_agentd.conf.d]# mysql -e "stop slave"
然後再查看slave status 狀態已經恢復正常
[root@zabbix-proxy-z zabbix_agentd.conf.d]# mysql -e "show slave status\G"
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.184.144
Master_User: rsync-user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-log.000003
Read_Master_Log_Pos: 18632349
Relay_Log_File: mariadb-relay-bin.000006
Relay_Log_Pos: 437035
Relay_Master_Log_File: master-log.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
IO監控
實現短信/微信報警
1.微信報警
1.註冊一個企業微信
2.自建一個應用
3.在zabbix server上創建媒介類型
4.給用戶添加報警
安裝python模塊
root@zabbix-server:~# apt-get install python-pip
root@zabbix-server:~# pip install requests