1.zabbix監控的相關概念
1.為什么要監控
在需要的時刻,提前提醒我們服務器出問題了
當出問題之后,可以找到問題的根源
網站/服務器 的可用性
網站可用性介紹
在軟件系統的高可靠性(也稱為可用性,英文描述為HA,High Available)里有個衡量其可靠性的標准——X個9,這個X是代表數字3~5。X個9表示在軟件系統1年時間的使用過程中,系統可以正常使用時間與總時間(1年)之比,我們通過下面的計算來感受下X個9在不同級別的可靠性差異。
1個9:(1-90%)*365=36.5天,表示該軟件系統在連續運行1年時間里最多可能的業務中斷時間是36.5天 2個9:(1-99%)*365=3.65天 , 表示該軟件系統在連續運行1年時間里最多可能的業務中斷時間是3.65天 3個9:(1-99.9%)*365*24=8.76小時,表示該軟件系統在連續運行1年時間里最多可能的業務中斷時間是8.76小時。 4個9:(1-99.99%)*365*24=0.876小時=52.6分鍾,表示該軟件系統在連續運行1年時間里最多可能的業務中斷時間是52.6分鍾。 5個9:(1-99.999%)*365*24*60=5.26分鍾,表示該軟件系統在連續運行1年時間里最多可能的業務中斷時間是5.26分鍾。 6個9:(1-99.9999%)*365*24*60*60=31秒, 示該軟件系統在連續運行1年時間里最多可能的業務中斷時間是31秒
2.監控什么東西
監控一切需要監控的東西,只要能夠想到,能夠用命令實現的都能用來監控
監控范疇
3.怎么來監控
遠程管理服務器
如果想遠程管理服務器就有遠程管理卡,比如Dell idRAC,HP ILO,IBM IMM
監控硬件
查看硬件的溫度/風扇轉速,電腦有魯大師,服務器就有ipmitool。
使用ipmitool實現對服務器的命令行遠程管理
yum -y install OpenIPMI ipmitool #->IPMI在物理機可以成功,虛擬機不行 [root@KVM ~]# ipmitool sdr type Temperature Temp | 01h | ns | 3.1 | Disabled Temp | 02h | ns | 3.2 | Disabled Temp | 05h | ns | 10.1 | Disabled Temp | 06h | ns | 10.2 | Disabled Ambient Temp | 0Eh | ok | 7.1 | 22 degrees C Planar Temp | 0Fh | ns | 7.1 | Disabled IOH THERMTRIP | 5Dh | ns | 7.1 | Disabled CPU Temp Interf | 76h | ns | 7.1 | Disabled Temp | 0Ah | ns | 8.1 | Disabled Temp | 0Bh | ns | 8.1 | Disabled Temp | 0Ch | ns | 8.1 | Disabled
查看CPU相關
lscpu、uptime、top、htop vmstat mpstat
其中htop需要安裝,安裝依賴與epel源。
[znix@clsn ~]$lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 1 On-line CPU(s) list: 0 Thread(s) per core: 1 Core(s) per socket: 1 Socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 85 Model name: Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz Stepping: 4 CPU MHz: 2494.150 BogoMIPS: 4988.30 Hypervisor vendor: KVM Virtualization type: full L1d cache: 32K L1i cache: 32K L2 cache: 1024K L3 cache: 33792K NUMA node0 CPU(s): 0
內存使用情況
[znix@clsn ~]$free -h total used free shared buffers cached Mem: 996M 867M 128M 712K 145M 450M -/+ buffers/cache: 271M 725M Swap: 1.0G 0B 1.0G
磁盤的使用情況
df、dd、iotop
[znix@clsn ~]$df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 24G 15G 62% / tmpfs 499M 20K 499M 1% /dev/shm /dev/vdb1 20G 4.4G 15G 24% /data
監控網絡
iftop nethogs
iftop 監控主機間流量 -i 指定監控網卡
nethogs 監控進程流量
4.監控工具總覽
mrtg 流量監控出圖
nagios 監控
cacti 流量監控出圖
zabbix 監控+出圖
5.zabbix介紹
Zabbix 是由 Alexei Vladishev 開發的一種網絡監視、管理系統,基於 Server-Client 架構。可用於監視各種網絡服務、服務器和網絡機器等狀態。
通過上面我們總結的怎么監控,發現一個問題,就是由於硬件的不同,導致我們無法使用統一的方法去監控他們,這個時候,就需要監控程序有一定的通用性,或者說,監控程序需要能夠與多種硬件設備通訊,才能滿足我們的監控需求,舉個例子:如果被監控的對象是一台安裝了linux操作系統的服務器,那么我們可以通過ssh或者telnet這種遠程工具與被監控對象建立起通訊的通道,可是如果被監控的對象是一台安裝了其他操作系統的服務器呢,更甚之,被監控的對象並不是服務器,而只是一台交換機或者路由器呢,所以,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
剛才提到了zabbix agent,一般情況下,我們將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 proxy的講解
當監控規模變得龐大時,我們可能有成千上萬台設備需要監控,這時我們是否需要部署多套zabbix系統進行監控呢?如果部署多套zabbix監控系統,那么監控壓力將會被分攤,但是,這些監控的對象將會被盡量平均的分配到不同的監控系統中,這個時候,我們就無法通過統一的監控入口,去監控這些對象了,雖然分攤了監控壓力,但是也增加了監控工作的復雜度,那么,我們到底該不該建立多套zabbix監控系統從而分攤巨大的監控壓力呢?其實,zabbix天生就有處理這種問題的能力,因為zabbix支持分布式監控,我們可以把成千上萬台的被監控對象分成不同的區域,每個區域中設置一台代理主機,區域內的每個被監控對象的信息被agent采集,提交給代理主機,在這個區域內,代理主機的作用就好比zabbix server,我們稱這些代理主機為zabbix proxy,zabbix proxy再將收集到的信息統一提交給真正的zabbix server處理,這樣,zabbix proxy分攤了zabbix server的壓力,同時,我們還能夠通過統一的監控入口,監控所有的對象,當監控規模龐大到需要使用zabbix proxy時,zabbix的架構如下圖,我們可以對比下圖,理解上述描述。
zabbix核心組件總結
zabbix agent:部署在被監控主機上,負責被監控主機的數據,並將數據發送給zabbix server。
zabbix server:負責接收agent發送的報告信息,並且負責組織配置信息、統計信息、操作數據等。
zabbix database:用於存儲所有zabbix的配置信息、監控數據的數據庫。
zabbix web:zabbix的web界面,管理員通過web界面管理zabbix配置以及查看zabbix相關監控信息,可以單獨部署在獨立的服務器上。
zabbix proxy:可選組件,用於分布式監控環境中,zabbix proxy代表server端,完成局部區域內的信息收集,最終統一發往server端。
zabbix工作模式
我們知道,agent端會將采集完的數據主動發送給server端,這種模式我們稱之為主動模式,即對於agent端來說是主動的。
其實,agent端也可以不主動發送數據,而是等待server過來拉取數據,這種模式我們稱之為被動模式。
聰明如你一定已經明白,不管是主動模式還是被動模式,都是對於agent端來說的,而且,主動模式與被動模式可以同時存在,並不沖突。
管理員可以在agent端使用一個名為zabbix_sender的工具,測試是否能夠向server端發送數據。
管理員可以在server端使用一個名為zabbix_get的工具,測試是否能夠從agent端拉取數據。
2.zabbix的安裝
1.環境檢查
[root@centos7 ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [root@centos7 ~]# uname -r 3.10.0-957.el7.x86_64 #為了不必要的網絡問題,我們這里直接關閉selinux和防火牆,如果網絡玩的比較溜的話,可以不關。
[root@centos7 ~]# vim /etc/selinux/config #將SELINUX=enforcig改為SELINUX=disabled #檢測selinux是否關閉,Disabled為關閉。
[root@centos7 ~]# getenforce Disabled #關閉防火牆
[root@centos7 ~]# systemctl stop firewalld #檢查防火牆是否關閉,出現下面標注的地方,則表示已經關閉
[root@centos7 ~]# systemctl status firewalld.service ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: inactive (dead) since Sun 2020-09-20 23:44:02 CST; 3s ago Docs: man:firewalld(1) Process: 3267 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS) Main PID: 3267 (code=exited, status=0/SUCCESS)
2.安裝方式的選擇
編譯安裝 (服務較多,環境復雜)
yum安裝(干凈環境)
我們這里選擇yum的方式進行介紹,后面有時間在進行編譯安裝介紹
3.配置yum源
官方yum源的配置
#這里需要注意,就是在配置zabbix的源之前,我們需要提前配置好base和epel源,因為安裝過程中會用到這些源。我這里配的是阿里的base和epel源,這里的配置方法就不做介紹了
#安裝軟件倉庫配置包,這個包包含了 yum(軟件包管理器)的配置文件。
[root@centos7 yum.repos.d]# rpm -ivh http://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm [root@centos7 yum.repos.d]# cd [root@centos7 ~]# cd /etc/yum.repos.d/ [root@centos7 yum.repos.d]# ls CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo zabbix.repo CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo epel.repo #這里我們看到yum源已經生成了
[root@centos7 yum.repos.d]# cat zabbix.repo [zabbix] name=Zabbix Official Repository - $basearch baseurl=http://repo.zabbix.com/zabbix/4.4/rhel/7/$basearch/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591 [zabbix-debuginfo] name=Zabbix Official Repository debuginfo - $basearch baseurl=http://repo.zabbix.com/zabbix/4.4/rhel/7/$basearch/debuginfo/ enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591 gpgcheck=1 [zabbix-non-supported] name=Zabbix Official Repository non-supported - $basearch baseurl=http://repo.zabbix.com/non-supported/rhel/7/$basearch/ enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX gpgcheck=1
阿里源配置
因為zabbix的鏡像畢竟在國外,所以難免就是我們下載的時候會失敗。所以我們這個時候可以配一個阿里的鏡像。配置如下
#這里的版本可以根據自己的需要改 [root@centos7 yum.repos.d]# cat zabbix.repo [zabbix] name=zabbix baseurl=https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/x86_64/ enabled=1 gpgcheck=0
4.安裝zbbix server
我們先從zabbix server開始安裝,由於我們使用mysql作為數據庫,所以,在安裝zabbix4.X的版本的server端時,需要安裝zabbix-server-mysql包,在4.X的zabbix版本中,並沒有單獨的zabbix server端程序包,安裝zabbix-server-mysql包即為安裝了server端包,同時,我們可以在服務端安裝zabbix_get包,以便向agent端發起測試采集數據請求,所以,我們在server端安裝如下包。
[root@centos7 ~]# yum install zabbix-server-mysql zabbix-get -y
安裝完成上述兩個包以后,server即為安裝完成,是不是很簡單,server端的相關配置我們一會兒再進行。
5.初始化zabbix database
此處我們將mysql與zabbix安裝在同一台服務器上,安裝mysql的過程此處不再贅述,當我們安裝完mysql,需要初始化zabbix的數據庫,而在我們安裝zabbix server時,其中就包含初始化zabbix數據庫的sql腳本。
我們查看剛才安裝完成的zabbix-server-mysql,可以看到一個create.sql.gz的包。
解壓此包即可獲得初始化sql腳本
[root@centos7 ~]# cd /usr/share/doc/zabbix-server-mysql-4.4.10 [root@centos7 zabbix-server-mysql-4.4.10]# gunzip create.sql.gz [root@centos7 zabbix-server-mysql-4.4.10]# ll create.sql -rw-r--r-- 1 root root 9177706 Jun 29 19:55 create.sql
但是需要注意的是,此sql腳本中sql只會在對應的數據庫中初始化zabbix所需要的數據庫表,但是不會創建zabbix數據庫,所以,創建zabbix數據庫這一步驟,還是需要我們手動進行的,所以,此處我們先手動創建zabbix的數據庫,過程如下。
mysql> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by "zabbix";
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
zabbix數據庫初始化完成后,執行對應sql初始化腳本
[root@centos7 ~]# cd /usr/share/doc/zabbix-server-mysql-4.4.10 [root@centos7 zabbix-server-mysql-4.4.10]# zcat create.sql.gz|mysql -uzabbix -pzabbix zabbix
查看zabbix數據庫,發現對應的表已經生成
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | zabbix | +--------------------+ 5 rows in set (0.00 sec) mysql> use zabbix; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +----------------------------+ | Tables_in_zabbix | +----------------------------+ | acknowledges | | actions | | alerts | | application_discovery | | application_prototype | | application_template | | applications | | auditlog | | auditlog_details | | autoreg_host | | conditions | 。。。。。。。。。。。。。。
6.配置zabbix server 端並啟動
server端已經安裝完畢,並且數據庫也已經初始化,現在我們開始配置server端,編輯zabbix server端的配置文件。
[root@centos7 zabbix-server-mysql-4.4.10]# vim /etc/zabbix/zabbix_server.conf
此處列出我們可能會經常修改的參數,如下:
ListenPort=10051
#服務端監聽的端口,保持默認即可
SourceIP=
#通過SourceIP參數可以指定服務端的源IP,當server端有多個IP地址時,我們可以指定服務端使用固定的IP與agent端進行通訊,為了安全起見,agent端會基於IP進行一定的訪問控制,也就是說agent端只允許指定的IP以server端的身份采集被監控主機的數據,如果IP不對應,則不允許采集被監控主機的數據,所以,當server端有多個IP時,我們可以通過SourceIP參數,指定server端通過哪個IP采集被監控主機的數據。
LogType=file
#通過LogType參數,可以指定通過哪種方式記錄日志,此參數可以設置為三種值,system、file、console,system表示將日志發往syslog,file表示使用指定的文件作為日志文件,console表示將日志發往控制台,默認為file。
LogFile=/var/log/zabbix/zabbix_server.log
#當LogType設置為file時,通過LogFile參數設置日志文件位置。
LogFileSize=0
#指明日志文件達到多大時自動滾動,單位為MB,如果設置LogFileSize為50,表示日志大小達到50MB滾動一次,設置為0表示日志文件不會滾動,所有日志保存在一個文件中。
DebugLevel=3
#通過DebugLevel參數可以定義日志的詳細程度,即為日志級別。
DBHost=localhost
#通過DBHost參數設置zabbix數據庫所在的服務器IP,由於此處zabbix與mysql安裝在同一服務器上,所以此處設置為localhost
DBName=zabbix
#通過DBName指定zabbix數據庫對應的名稱
DBUser=zabbix
#通過DBUser指定zabbix數據庫用戶名
DBPassword=123123
#通過DBPassword指定zabbix數據庫用戶的密碼
DBPort=3306
#通過DBPort指定zabbix所在數據庫服務監聽的端口號
DBSocket=/var/lib/mysql/mysql.sock
#如果數據庫服務與server端在同一台服務器上,可以通過DBSocket指定數據庫本地套接字文件位置,但是需要注意,即使設置了mysql套接字文件的位置,還是需要配合DBHost參數,否則在登錄zabbix控制台時,可能會出現警告,在zabbix server的log中,也可能會出現無法連接到數據庫的提示。
根據上述的配置參數的解釋,根據具體需求進行實際配置即可。
配置完成后,啟動zabbix服務端即可,啟動后,10051端口已經被監聽。
[root@centos7 zabbix-server-mysql-4.4.10]# systemctl start zabbix-server.service [root@centos7 zabbix-server-mysql-4.4.10]# ss -ntl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:10051 *:* LISTEN 0 80 :::3306 :::* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* LISTEN 0 128 :::10051 :::*
好了,zabbix server已經啟動,剩下的就是初始化zabbix設置了,但是初始化zabbix的設置需要zabbix web提供的GUI圖形化界面,所以,我們需要先安裝zabbix web。
7.安裝zabbix web,並啟動
zabbix web可以安裝在單獨的主機上,只要能連接到zabbix database所在的數據庫即可,但是此處為了方便,我們將zabbix web與 mysql以及 zabbix server安裝在同一台服務器上。
因為zabbix web需要lamp環境,所以,此處我們將會依賴到的環境先安裝好。
[root@centos7 zabbix-server-mysql-4.4.10]# yum install gcc libxml2-devel net-snmp net-snmp-devel curl curl-devel php php-bcmath php-mbstring httpd php-mysql php-gd php-ldap php-xml -y
完成上述步驟后,安裝zabbix web所需要的兩個包
[root@centos7 ~]# yum install zabbix-web zabbix-web-mysql -y
查看剛才安裝完成的zabbix-web程序包,可以看到,zabbix-web的web應用存放在/usr/share/zabbix中。
[root@centos7 ~]# rpm -ql zabbix-web 。。。。。。 /usr/share/zabbix/locale/tr/LC_MESSAGES/frontend.mo /usr/share/zabbix/locale/uk /usr/share/zabbix/locale/uk/LC_MESSAGES /usr/share/zabbix/locale/uk/LC_MESSAGES/frontend.mo /usr/share/zabbix/locale/vi /usr/share/zabbix/locale/vi/LC_MESSAGES /usr/share/zabbix/locale/vi/LC_MESSAGES/frontend.mo /usr/share/zabbix/locale/zh_CN /usr/share/zabbix/locale/zh_CN/LC_MESSAGES /usr/share/zabbix/locale/zh_CN/LC_MESSAGES/frontend.mo /usr/share/zabbix/locale/zh_TW /usr/share/zabbix/locale/zh_TW/LC_MESSAGES /usr/share/zabbix/locale/zh_TW/LC_MESSAGES/frontend.mo /usr/share/zabbix/maintenance.php /usr/share/zabbix/map.import.php /usr/share/zabbix/map.php 。。。。。。。。
zabbix還是比較貼心的,針對httpd,zabbix-web包中已經包含了對應zabbix文檔路徑的配置文件。
[root@centos7 ~]# vim /etc/httpd/conf.d/zabbix.conf
可以看到,針對zabbix web的文檔路徑,此文件中已經為我們准備好了默認配置,如果不使用httpd的虛擬主機(讓一台服務器基於IP、主機名或端口號實現提供多個網站服務的技術。),只要將時區稍加改動即可直接使用。
而此處,我們使用httpd的虛擬主機訪問zabbix web,所以,將配置文件中的內容改為如下配置,同時將時區修改為亞洲上海。
[root@centos7 ~]# vim /etc/httpd/conf.d/zabbix.conf #下面黃底和紅底是修改的部分,其中黃底根據自己需求加,紅底是必改的
[root@centos7 ~]# cat /etc/httpd/conf.d/zabbix.conf # # Zabbix monitoring system php web frontend # <VirtualHost 192.168.195.168:80> servername zabbix.qingbai.net documentroot /usr/share/zabbix Alias /zabbix /usr/share/zabbix <Directory "/usr/share/zabbix"> Options FollowSymLinks AllowOverride None Require all granted <IfModule mod_php5.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> </Directory> <Directory "/usr/share/zabbix/conf"> Require all denied </Directory> <Directory "/usr/share/zabbix/app"> Require all denied </Directory> <Directory "/usr/share/zabbix/include"> Require all denied </Directory> <Directory "/usr/share/zabbix/local"> Require all denied </Directory> </VirtualHost>
配置完成后,啟動httpd服務。
[root@centos7 ~]# systemctl start httpd.service
好了,zabbix web安裝配置完成
8.zabbix agent的安裝
agent端安裝也非常方便,直接被監控主機上安裝如下兩個包即可。此處被管理主機也已經配置好了zabbix的源,agent版本可以跟server端版本不一致,沒有關系,安裝即可。注意agent端防火牆什么的,對於新手來講也建議直接關閉。
[root@centos7 ~]# yum install -y zabbix-agent zabbix-sender
9.zabbix agent配置的介紹
我們查看一下zabbix-agent都安裝了哪些文件,當然,最重要的就是zabbix_agentd.conf這個配置文件了。
還記得我們在剛開始介紹zabbix時,說過的"主動模式"與"被動模式"嗎?這兩種模式的相關配置,都需要在zabbix_agentd.conf中定義,打開這個文件,我們來配置一下最常用的agent端配置。首先,可以看到配置文件中有很多注釋,打開配置文件,首先看到的就是"通用參數配置段",我們可以在此配置段配置zabbix_agent進程的進程編號文件路徑,存儲日志方式,日志文件位置,日志滾動閾值等常用設定,細心如你一定已經發現,zabbix_agent配置文件的"通用配置段"中的參數大多數與zabbix_server配置文件中的常用參數意義相同,所以,此處不再過多贅述,如果沒有特殊需要,保持默認即可。
此處先說說我們馬上會用到的兩個配置段,如下圖紅框中的注釋所描述的,"被動模式配置段"與"主動模式配置段"
我們已經在最開始的概念介紹中,描述過,"主動模式"與"被動模式"都是對於agent端來說的,而且它們可以同時存在,並不沖突。
我們先來看看"被動模式"的相關配置參數。
被動模式相關參數如下:
Server:用於指定允許哪台服務器拉取當前服務器的數據,當agent端工作於被動模式,則代表server端會主動拉取agent端數據,那么server端的IP必須與此參數的IP對應,此參數用於實現基於IP的訪問控制,如果有多個IP ,可以使用逗號隔開。
ListenPort:用於指定當agent端工作於被動模式時所監聽的端口號,默認端口為10050,也就是說,server端默認訪問10050端口,從而拉取數據。
ListenIP:用於指定agent端工作於被動模式時所監聽的IP地址,默認值為0.0.0.0,表示監聽本機的所有IP地址。
StartAgents:用於指定預生成的agent進程數量。
好了,被動模式的參數說完了,現在聊聊主動模式。
主動模式的常用參數如下:
ServerActive:此參數用於指定當agent端工作於主動模式時,將信息主動推送到哪台server上,當有多個IP時,可以用逗號隔開。
Hostname:此參數用於指定當前主機的主機名,server端通過此參數對應的主機名識別當前主機。
RefreshActiveChecks:此參數用於指明agent端每多少秒主動將采集到的數據發往server端。
此處,我們同時設置"被動模式"與"主動模式"的如下參數,其他保持默認即可,修改完成后保存退出。
Server=192.168.195.166
ServerActive=192.168.195.166
Hostname=test1.qingbai.net #這個根據需要改
配置文件修改完成后,啟動agent端進程。
[root@centos7 ~]# systemctl start zabbix-agent [root@centos7 ~]# ss -ntl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:10050 *:* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* LISTEN 0 128 :::10050 :::*
10.檢測連通性
過程如下
#服務端安裝zabbix-get檢測工具
[root@centos7 ~]# yum install zabbix-get -y
#在服務端進行測試,注意:只能在服務端進行測試,如果能返回結果,代表測試正常,我這里就是測試正常
[root@centos7 ~]# zabbix_get -s 192.168.195.168 -p 10050 -k "system.cpu.load[all,avg1]" #這個命令的用法是通過-s選項指定被監控主機的IP,通過-k選項指定對應的KEY,即可獲得對應主機的對應監控指標的信息。
0.120000
3.web界面的基本操作
1.web界面初始化操作
完成上述安裝步驟后,訪問 Zabbix_Web_IP/zabbix ,可以看到如下圖的zabbix安裝頁面,點擊下一步按鈕
可以看到,zabbix自動檢查了安裝環境是否滿足要求,如果出現不滿足要求的情況,需要進一步處理,此處沒有問題,點擊下一步
此處zabbix需要配置數據庫連接,此處配置數據庫的類型,IP,端口,數據庫名,用戶密碼等信息,端口填寫0表示使用默認端口(3306端口)
此處,我們可以填寫zabbix server的詳細信息,包括IP地址,端口號,以及server名稱等,填寫完成后點擊下一步。
在配置之前,請確定概要信息無誤,點擊下一步。
從提示可以看出,初始化配置已經完成,而且zabbix提示我們,這些配置信息都被保存到了"/etc/zabbix/web/zabbix.conf.php" 配置文件中,如果想要更改剛才的一些配置,可以通過修改此文件完成,初始化已經完成,點擊結束即可。
點擊完成按鈕后,可以看到zabbix的登錄頁面,默認的管理員用戶為Admin(注意A是大寫),密碼為zabbix,輸入用戶名密碼后登錄。
登錄之后,為了更加安全,我們不應該使用管理員的默認密碼,所以,我們最好先修改管理員密碼,修改過程如下
2.漢化操作
登錄完成后,可以看到zabbix的儀表盤
嗯嗯嗯,我知道你看英文不爽,別急,現在就調成中文,點擊下圖中紅框標注的圖標。
語言選擇中文,點擊更新即可,但是你可能無法在語言中看到中文選項,如果無法找到中文選項,則代表你的配置文件中的中文選項顯示屬性為false。
如果你安裝的zabbix4.X.X無法看到中文選項,那么你可以需要少許額外的操作,首先,你需要修改如下文件。
找到中文對應的值,將顯示屬性設置為true即可。
但是,你可能還會遇見中文亂碼的情況,如果遇到中文亂碼,可以從windows中挑選一個順眼的中文字體,(windows的字體目錄一般在C:\Windows\Fonts下面)將對應字體文件放置到linux中zabbix web的字體目錄中,因為我們使用的是rpm包安裝的zabbix web,所以zabbix web的默認字體目錄為/usr/share/zabbix/fonts(如果沒有這個目錄可以創建),windows中的字體文件后綴名如果為TTF,當我們把對應字體文件拷貝到zabbix字體目錄時,需要修改其后綴名為小寫的ttf(如果本來就是小寫的則不用任何修改了),字體文件上傳完畢后,第一步需要修改zabbix默認字符集軟鏈接。第二步修改/usr/share/zabbix/include/defines.inc.php配置文件,詳細過程如下
#我們這里選擇windows上的仿宋常規字體simfang.ttf,然后拷貝到zabbix服務器上
[root@centos7 ~]# ls anaconda-ks.cfg mysql80-community-release-el7-3.noarch.rpm simfang.ttf #創建默認字體目錄
[root@centos7 ~]# mkdir -p /usr/share/zabbix/fonts #拷貝我們喜歡的字體到默認字體目錄
[root@centos7 ~]# mv simfang.ttf /usr/share/zabbix/fonts/
#這里我們還需要把字體文件拷貝到/usr/share/zabbix/assets/fonts/這個目錄下,並加上相關權限,這個步驟一定要做,不然,屆時監控圖形界面顯示方框不顯示文字
[root@centos7 fonts]# cp /usr/share/zabbix/fonts/simfang.ttf /usr/share/zabbix/assets/fonts/
[root@centos7 fonts]# chmod 777 /usr/share/zabbix/assets/fonts/simfang.ttf #下面我們看到zabbix的默認字符集是指向別的地方的
[root@centos7 ~]# ll /etc/alternatives/zabbix-web-font lrwxrwxrwx 1 root root 38 Sep 22 06:37 /etc/alternatives/zabbix-web-font -> /usr/share/fonts/dejavu/DejaVuSans.ttf #刪掉默認字符集的軟鏈接,然后指向我們剛剛的傳進來的字符。
[root@centos7 ~]# rm -rf /etc/alternatives/zabbix-web-font [root@centos7 ~]# ln -s /usr/share/zabbix/fonts/simfang.ttf /etc/alternatives/zabbix-web-font #這里我們看到默認字符集已經指向我們傳進來的字符了
[root@centos7 ~]# ll /etc/alternatives/zabbix-web-font lrwxrwxrwx 1 root root 35 Sep 23 06:20 /etc/alternatives/zabbix-web-font -> /usr/share/zabbix/fonts/simfang.ttf
#修改相關配置文件,讓web頁面支持簡體中文顯示
[root@centos7 ~]# vim /usr/share/zabbix/include/defines.inc.php
#找到如下兩行
define('ZBX_FONT_NAME', 'graphfont');
define('ZBX_GRAPH_FONT_NAME', 'graphfont'); // font file name
#把后面的graphfont換成剛才上傳的字體文件對應的名稱即可,就以為我這個為例,改完之后為
define('ZBX_FONT_NAME', 'simfang');
define('ZBX_GRAPH_FONT_NAME', 'simfang'); // font file name
好了,上述操作完成后,zabbix控制台即顯示為中文了。
3.zabbix的web界面菜單大概介紹
好了,我們以后的監控工作就要圍繞這個web界面展開了,為了以后更好的展開工作,我們先大概的了解一下zabbix的菜單。
管理菜單中,一般用於管理zabbix自身及zabbix相關設置。
配置菜單中,一般用於配置監控相關設置
監測菜單,一般用於查看被監控的相關數據
報表菜單中,可以為管理員生成一段時間內的監控統計信息。
4.在zabbix中添加主機
在前文中,我們已經介紹過了zabbix是什么,以及怎樣安裝zabbix環境,那么現在,我們應該開始實際動手使用zabbix了,為了能讓大家更加容易理解實際使用過程中將會用到的術語以及概念,我們先把實際工作場景描述清楚,然后再根據描述的工作場景進行演示。
假設,我們想要使用zabbix監控一台linux服務器,那么,我們肯定要將這個服務器納入zabbix的管理范圍,而"添加主機"這個操作,就是將被監控的主機納入zabbix管理范圍的一個必須操作,如果我們有10台主機都需要被zabbix監控呢,沒錯,這10台主機都必須被添加到zabbix的監控列表中,在zabbix中,我們將被監控的對象稱之為"主機","主機"不一定是服務器,也可以是路由器,交換機等網絡設備,而且,根據主機的屬性、角色、特征的不同,我們還能夠將主機分組,比如,我們有10台服務器,10台服務器中,有3台windows服務器,有7台linux服務器,那么,我們可以按照操作系統的不同,將他們分成兩組,windos服務器組與linux服務器組,或者我們不按照操作系統對主機進行分組,而是根據服務器的角色對主機分組,比如,一共10台服務器,3台是是提供ldap服務的,2台是提供web服務的,5台是提供數據庫服務的,我們也可以把它們按照角色分成3組,ldap主機組、web主機組、db主機組, 當然,我們只是舉個例子,實際應用中,具體怎樣分組,是根據實際需求視情況而定的,那么,為什么要將主機分組呢,這是為了方便管理,因為同一類主機需要被監控的指標很有可能都是相同的,所以將他們分為一組方便管理,這是后話,我們到時候再聊。
上面一段話中,我們提到了兩個zabbix的常用術語,"主機"與"主機組",我們再來總結一遍:
1、host(主機):需要被zabbix監控的對象,被稱為主機,主機必須屬於某個主機組。
2、hostgroup(主機組):"主機組"也被稱為"主機群組",是由具有相同屬性、特征、角色的多個主機組成的邏輯單元。
添加主機演示
好了,理解上述兩個術語,並且能夠在zabbix中使用它們,就是我們這一段落所要達到的目標。
那么,我們來看看怎樣在zabbix中添加一台主機,在動手添加主機之前,先說明一下我們的環境。
我們已經將zabbix-server、zabbix-database、zabbix-web安裝在了192.168.195.166上。
同時,我們將zabbix-agent安裝在了192.168.195.168上。
所以此處,192.168.195.168就是被監控的對象,我們需要將168添加為zabbix主機。
首先,打開我們的zabbix web控制台,我們看看都有哪些"主機組"。
點擊 "配置" ---- "主機群組" ,可以看到,系統默認已經為我們准備了一些主機組,如果這些主機組不滿足我們的需要,我們也可以創建新的主機組,點擊下圖中的"創建主機群組"按鈕,即可創建主機組,但是,現在我們還不用深入研究主機組,此處只是讓大家了解一下,對主機組有一個初步的認識即可。
同樣,點擊 "配置" ---- "主機" ,即可查看已經被加入zabbix主機列表的主機,可以看到,zabbix默認將zabbix server添加為了一台主機,以便可以自己監控自己,但是此處,我們需要添加一台我們自己的主機,就是192.168.195.168,點擊"創建主機",點擊創建主機之前,可以選擇左側的"群組"下拉菜單,以確定將要創建的主機所在的主機組,當然,我們也可以先不選主機組,直接點擊"創建主機"按鈕。
點擊"創建主機"按鈕以后,即可看到類似如下界面,為了更好的描述每個步驟,具體解釋參考下圖后面的注釋列表。
好了,按照上述界面中的配置進行設置以后,點擊"添加"按鈕,即可簡單的添加一台主機,可以看到,192.168.195.168已經被添加到了主機列表中。
而且,如果此時我們再次查看主機組,已經發現,linux server主機組中的成員已經包含了test1主機。
4.監控項的相關配置
1.在zabbix中添加監控項
描述了怎樣在zabbix中添加主機,但是,我們並沒有對主機進行任何指標的實際監控,那么現在,我們來說說,具體怎樣監控我們想要監控的指標。
在具體操作之前,我們先聊聊理論,假設我們想要監控磁盤的使用率,在沒有zabbix這種監控工具時,我們怎樣監控呢,再或者,我們不僅沒有zabbix這種監控工具,我們也不會寫腳本,更不會寫任何程序,我們該如何監控磁盤的使用率呢。沒錯,人工監控,當我們無法依賴任何工具或者腳本等外部助力時,我們只能不停的看着屏幕,查看當前磁盤的使用率,如果磁盤使用率達到了我們設定的閾值,我們就會作出相應的處理動作。即使我們是通過人工完成監控的,我們也要想辦法能夠獲取到被監控目標的數據,比如我們想要監控磁盤使用率,那么我們就要不停的獲取磁盤的使用率信息,以便我們能夠隨時的了解磁盤的空間使用情況,那么我們怎樣獲取磁盤的使用率呢,就拿centos為例,我們可能會通過如下命令,獲取每個分區的磁盤使用率。
沒錯,我們通過命令,獲取到了磁盤使用率的信息,當然,這個命令比較簡短,方便我們從鍵盤鍵入,如果一條簡單的命令,無法獲取到磁盤使用率的信息呢,那么我們可能會通過一條稍微復雜的命令去實現監控,比如,如果我們只想要監控"根分區"磁盤使用率,我們可能會使用如下命令實現。
[root@centos7 ~]# df -h |awk '$6~/^\/$/{print $5,$6}' 2% /
我們發現,獲取監控信息的命令越來越長了,那么我們能不能盡量簡化這些較長的命令呢,必須能啊,設置個別名不就行了,那么,我們把剛才的命令設置一個別名,直接執行命令別名試試。
[root@centos7 ~]# alias rdu="df -h |awk '\$6~/^\/$/{print \$5,\$6}'" [root@centos7 ~]# rdu 2% /
可以看到,原本比較長的命令只縮減為了rdu三個字符。是不是比原來方便了許多呢,我們只需要三個字符,就能獲取到根分區的使用情況。
這個時候,你可能會問,linux的命令別名與zabbix的監控項有關系嗎,我們是來看怎么添加zabbix監控項的,不是來聽你瞎BB的。
好吧,其實它們並沒有什么關系,但是他們有一些類似的地方,比如,我們剛才做的工作,無非就是獲取監控信息,需要獲取監控信息,就要執行對應的命令,我們也可以通過別名,調用對應的命令,從而獲取到我們想要或得到的監控信息,在zabbix中,我們要監控的某一個指標,被稱為"監控項",就像我們的磁盤使用率,在zabbix中就可以被認為是一個"監控項"(item),,如果要獲取到"監控項"的相關信息,我們則要執行一個命令,但是我們不能直接調用命令,而是通過一個"別名"去調用命令,這個"命令別名"在zabbix中被稱為"鍵"(key),所以,在zabbix中,如果我們想要獲取到一個"監控項"的值,則需要有對應的"鍵",通過"鍵"能夠調用相應的命令,獲取到對應的監控信息,我們暫且這樣理解,方便我們入門。
好了,我們此處又提到了兩個新的術語,我們來總結一遍:
監控項(item):某個監控指標,在zabbix中就被稱之為一個item,某個主機中可能有多個需要被監控的指標,也就是說,某個host中可能有多個item
鍵(key 、item key):如果想要獲取監控項對應的數據,則必須通過某個key去獲取,我們可以把key想象成調用對應命令的"命令別名",zabbix中自帶一些key,這些key往往比較通用,比如,通過這些key,我們可以監控cpu,內存,硬盤等常用指標,獲取不同的指標信息,需要不同的key,但是如果這些自帶的key無法滿足我們的監控需求時,我們也可以自定義key,通過自定義key執行對應的操作,這些都是后話,我們 慢慢來。
正式添加監控項:
好了,說了這么多,哥們兒你應該有點印象了,話接上回,我們已經在zabbix中添加了一台主機,現在,我們繼續在這台主機上操作。
首先,打開我們zabbix控制台,點擊 "配置" -- "主機" ,可以看到我們上次創建的主機,雖然我們為對應的被監控主機安裝了agent,但是主機對應的ZBX仍然顯示為灰色,代表我們還沒有任何監控項被檢測到,那么現在,我們來為test1主機添加一個監控項。
點擊test1主機上的"監控項",,如下圖所示位置。
進入監控項配置界面后,可以根據一些條件,篩選出已經存在的一些監控項,但是我們並沒有任何監控項,所以此處,我們直接點擊"創建監控項"按鈕。以便新建監控項。
假如,現在我們想要監控testzbx1這台主機的CPU的上下文切換此處,那么我們可以在此界面進行如下配置。
在鍵值一欄中,我們可以選擇對應的key,也就是說,我們通過哪個key,獲取到cpu的上下文切換次數的信息,所以,點擊"選擇"按鈕,點擊選擇按鈕以后,可以看到非常多的預先定義好的key,這些key都是zabbix自帶的key,這些key一般都是系統級別的通用的監控項所能夠用到的key,如果這些"鍵"不能滿足我們的需求,我們則需要自定義key,我們后面再聊,此處,我們選擇system.cpu.switches
選擇完成后,可以看到,key的值已經自動填充到了"鍵值"的文本框中。
好了我們接着進行下面的配置,配置如下
點擊添加按鈕以后,可以看到,test1主機的第一個監控項已經被添加,而且處於已啟用狀態。
點擊監控項旁邊的"應用集",可以看到,應用集中已經存在了cpu應用集,而且這個應用集中已經存在一個監控項,就是我們剛才創建的"cpu 上下文切換"監控項。
2.查看監控內容
我們已經創建了一個監控項,那么怎樣查看這個監控項的監控情況呢, 點擊 "監測" ---- "最新數據",但是目前並沒有展示出任何數據,因為我們還沒有指定要查看哪些監控數據。
我們可以輸入過過濾條件,過濾出我們想要查看的數據,比如,我們選擇根據主機過濾,過濾出對應主機的對應的監控項數據。
點擊應用按鈕以后,應該可以看到我們剛才創建的監控項,已經存在了部分數據,如果你剛剛創建完監控項,不要着急的立馬查看"監控項"數據,因為它可能需要一段時間收集數據。
但是,如果超出正常收集數據的時間后,很長時間以內仍然無法收集到數據,那么有可能是因為agent端與server端時間不同步引起的,請確定你的agent端與server端的時間是同步的。
可以看到,"cpu 上下文切換"這個監控項已經存在數據,我們點擊對應的"圖形"連接
點擊上圖中的"圖形"連接,可以看到如下界面,zabbix已經監控到了對應的cpu上下文切換頻率,並且繪制出了對應的"圖形"。
3.在zabbix中添加帶有參數的監控項
在前文中,我們已經解釋了 "監控項"(item)、"鍵"(key)、"應用集"(application)等概念,並且為test1主機添加了一個監控項,其作用是監控主機的cpu上下文切換速率。
這次,我們再為test1主機添加一個監控項,用於監控磁盤分區的使用率,因為創建監控項的過程我們在前文已經詳細的演示過,重復的地方我們就不再贅述,這次創建的監控項與上次創建的監控項只有些許不同而已,我們會重點介紹它們的不同之處。
假設我們想要監控testzbx1主機上的"根分區"的磁盤使用率,所以,我們命名監控項名稱為 根分區使用率。
我們說過,如果想要獲取監控指標的數據,可以通過指定的key獲取,如果zabbix自帶的key不能滿足我們,我們可以自定義key,而此處,我們的需求是監控根分區磁盤使用率,而zabbix自帶的key中,正好有一個key能夠獲得某個磁盤分區的使用率,所以,我們點擊上圖中的"選擇"按鈕
點擊選擇按鈕以后,從列表中找到如下圖中的鍵,鍵名為"vfs.fs.size[fs,<mode>]",從解釋中可以了解到,通過這個鍵獲取到信息與磁盤容量相關。
細心的你一定發現了,我們這次選擇的"鍵"與上一次選擇的"鍵"有哪些地方好像不太一樣,沒錯,格式好像不太一樣。
我們來對比一下,上次,我們為了監控cpu的上下文切換次數,選擇了如下鍵。
而這次,為了監控磁盤分區的使用率,我們選擇了如下鍵。
這次我們選擇的鍵,除了鍵名以外,還多出了傳入參數的位置。
對於"vfs.fs.size[fs,<mode>]"這個鍵來說,"vfs.fs.size"就是鍵名,"[fs,<mode>]"就是這個鍵需要的參數。
而"[fs,<mode>]"這兩個參數中,fs是不可省參數,mode是可省參數。
聰明如你一定已經發現了,如果參數被尖括號括起,則代表這個參數是可省參數,例如上述的<mode>,如果參數沒有被尖括號括起,則代表是不可省參數,例如上述的fs。
那么這個鍵到底怎么使用呢,fs和mode這兩個參數分別代表了什么呢,我們可以通過官網幫助手冊,查看這些"鍵"的含義與使用方法。
zabbix4.0版本的所有"鍵"的含義及用法的官方在線手冊地址如下。
https://www.zabbix.com/documentation/4.0/zh/manual/config/items/itemtypes/zabbix_agent
打開上述網址后,查詢對應"鍵"的名稱,從在線幫助手冊中可以看到,這個鍵的描述,返回值,參數的含義與值,以及示例等信息。
從上圖可以看出,通過這個鍵,獲取的返回信息可以有兩種類型,一種是整形,一種是浮點型,這取決於我們需要獲取哪種信息,如果是獲取磁盤的使用百分比,則會返回給我們浮點型,如果是獲取使用量,則會返回整形,代表使用了多少bytes,上圖中解釋了兩個參數的用法,fs代表對應的文件系統,我們可以理解為對應的文件系統所在的分區,mode的值可以為total,free,used,pfree,pused,分別表示獲取對應文件系統的總大小(省略mode參數時,此為默認值),空余空間大小,已經使用的空間的大小,空閑率和使用率,還記得這個鍵返回的兩種數據類型嗎,如果我們將mode設置為total,free,used,那么,這個鍵返回的數據類型將為整形(就是一個整數),如果我們將mode設置為pfree或者pused,那么這個鍵返回的信息的數據類型就是浮點型(帶有小數點的數字)。而且,幫助文檔中還給出了這個"鍵"的使用示例
,vfs.fs.size[/tmp,free],示例表示獲取/tmp所對應的文件系統的剩余空間大小。
好了,我們大概對vfs.fs.size[fs,<mode>]這個鍵有了一些了解,通過這個鍵,可以獲取到文件系統對應分區的磁盤空間使用情況信息,我們可以通過fs參數指定對應的文件系統,通過mode參數,指定我們想要獲取的信息的格式,我們回到我們的監控項配置頁面。
當我們選擇了對應的鍵以后,我們還需要做出適當的修改,將其參數值改成我們所需要的值,如下。
由於我們獲取的數據為根分區的使用率,返回的信息為浮點型,所以,信息類型選擇浮點型,由於返回的信息為磁盤使用率,所以單位設置為 "%"
好了,其他的設置我們在前一篇文章中已經解釋過了,此處不再贅述,但是為了演示方便,我將數據更新間隔設置為10秒收集一次磁盤數據,再次強調,這樣設置只是為了快速獲取演示效果,生產環境中對於類似這樣的數據不要監控的如此頻繁,配置如下后,點擊添加按鈕。
監控項添加完畢后,等待一分鍾左右,查看對應的監控數據,如下,點擊監控項對應的"圖形"連接。
可以看到,監控到的磁盤使用率為1.3%,而且界面上顯示的單位也是"%",還記得我們在監控項中配置的單位嗎,就是這個作用
這次,我們又添加了一個監控項,只是與上一次相比,我們這次添加的監控項可以傳入參數。
而且,我們已經了解到,如果想要搞明白zabbix的各種自帶key的作用,可以參考zabbix官方在線手冊:
https://www.zabbix.com/documentation/4.0/manual/config/items/itemtypes/zabbix_agent
4.zabbix模板的使用和配置
上面我們介紹了添加單個監控項和添加有參數的監控項。但是我們一般在主機監控項的時候,一般是直接添加對應的模板,只有當對應模板里的監控項不滿足我們的需求,我們才會和上面一樣,單獨添加監控項。
模板:將一類的監控項匯總在一起,單獨保存成一個集合,可以直接被其它主機調用。(注意不要和應用集混淆)
那么模板怎么添加,我們還是那test1主機做演示。
點擊上面的選擇之后,我們會到下面的界面