1. 程式人生 > 實用技巧 >Zabbix基礎介紹及搭建

Zabbix基礎介紹及搭建

zabbix

一、監控基本概述

1.什麼是監控?

1.監控系統是整個運維環節,乃至整個產品生命週期中最重要的一環
2.事前及時預警發現故障
3.事後提供詳細的資料用於追查定位問題

2.為什麼要做監控?

1.系統的監控:實際上是對系統不間斷的實時監控
2.實時反饋系統當前狀態:我們監控某個硬體、或者某個系統,都是需要能實時看到當前系統的狀態,是正常、異常、或者故障。
3.保證服務可靠性安全性:我們監控的目的就是要保證系統、服務、業務正常執行
4.保證業務持續穩定執行:如果我們的監控做得很完善,即使出現故障,能第一時間接收到故障報警,在第一時間處理解決,從而保證業務持續性的穩定執行。(往往,第一時間知道業務宕機的都是使用者)

3.主要的監控工具

1.CACTI:網路監控,Cacti是一套基於PHP,MySQL,SNMP及RRDTool開發的網路流量監測圖形分析工具
2.NAGIOS:系統監控,很久之前使用的,需要人為定義,沒有圖形,沒有辦法查詢歷史
3.ZABBIX:分散式監控
4.open-falcon:小米監控產品,開源的
5.premethous:普羅米修斯,監控docker,K8S
6.lepus:天兔,資料庫監控

4.怎麼監控

1.檢視記憶體使用  free -m
2.取出監控的值
3.對比某個限制的值
4.如果超過限制的值則告警

5.監控的內容

1.公有云:雲監控
2.硬體監控:CPU溫度,主機板溫度,磁碟,網絡卡,風扇轉速
3.系統監控:cpu,記憶體,網路,磁碟剩餘
4.服務監控:
    1)MySQL:主從複製是否有延遲(zabbix監控模板)
    2)redis:主從複製是否有延遲
    監控思路:zabbix沒有固定模板,可以在主庫中set一個key為時間戳,然後從庫會同步這個時間戳(動態),寫指令碼時時獲取這兩個時間戳,做對比。
    3)NFS:磁碟掛載狀況
    4)tomcat:JVM監控,老年代、新生代、永久帶、full-gc、垃圾回收
    5)rsync的同步情況,MD5校驗檔案是否被篡改
5.web頁面監控:請求時間,響應時間,載入時間,nginx狀態碼監控,pv,uv,ip
6.網路監控:網絡卡流量(出入流量),貸款,監控寶
7.業務監控:
	1)URL監控
	2)api監控:針對業務的介面  basic.action
	3)nginx狀態碼
	4)tomcat日誌監控
8.日誌監控:ELK,第三方日誌易
9.安全監控:firewalld,WAF,牛盾雲,安全狗
10.容器監控:premethous,普羅米修斯

二、指令碼監控

1.監控命令

1)監控CPU

w top htop uptime glances ps

#不管用什麼命令監控,檢視CPU,我們都必須瞭解,系統的使用者態和核心態。
us: 使用者態     跟使用者的操作有關35%
sy: 核心態     跟核心的處理有關65%
id: CPU空閒

#當我們執行一個命令的時候,很快能出來結果,但是有多少人知道,這個很快,他都佔用了哪些時間呢?
[root@web02 ~]# time ls
real    0m0.002s       真實執行時間
user    0m0.001s       使用者執行時間
sys     0m0.001s       系統執行時間

2)監控記憶體

free glances top htop

3)監控磁碟

df glances iotop iostat dstat

#以兆為單位,每秒執行一次,執行10次
[root@web02 ~]# iostat -dm 1 10

4)網路監控

glances ifconfig iftop ip route

nethogs 該命令可以檢視某個程序所使用的流量

5)TCP11種狀態監控命令

netstat -ant
ss -ant

2.監控記憶體例項

1)需求

每1分鐘監控當前系統的記憶體使用狀態,如果可用低於100MB則傳送郵件。同時列印當前還剩餘多少記憶體

#思路
1.如何獲取記憶體的狀態資訊 free -m
2.如何獲取記憶體的可用狀態 free -m|awk '/Mem/{print $NF}'
3.如何進行數字的比對,高於100MB不處理,低於100MB,傳送郵件。
4.如何每分鐘執行。

2)監控指令碼

[root@zabbix ~]# vim /scripts/free.sh
#!/bin/bash
Hostname_Ip=$(hostname)_$(hostname -I|awk '{print $2}')
Date=$(date +%F)
while true
do
    Mem_Free=$(free -m|awk '/^Mem/{print $NF}')
    if [ $Mem_Free -lt 100 ];then
        echo "$Date: $Hostname_Ip 記憶體可用量不足100M,當前剩餘: $Mem_Free"
    else
        echo "$Date: $Hostname_Ip 記憶體可用量充足,當前剩餘: $Mem_Free"
    fi
    sleep 5
done

3)思考

隨著時間的推移,使用者不斷增多,服務消耗的記憶體越來越多,當系統記憶體不足的時候,可能會導致系統產生oom(out of memory)

1.當系統記憶體不足時就會大量使用swap(虛擬記憶體)
2.當系統大量使用swap的時候,系統會特別卡

注意:有時可能記憶體還有剩餘300M或者500M,但是swap依然被使用

4)新指令碼

[root@zabbix ~]# vim /scripts/free.sh
#!/bin/bash
Hostname_Ip=$(hostname)_$(hostname -I|awk '{print $2}')
Date=$(date +%F)
while true
do
    Mem_Free=$(free -m|awk '/^Mem/{print $NF}')
    Swap_used=$(free -m | awk '/^Swap/ {print $3}')
    if [ $Mem_Free -lt 100 -a $Swap_used -gt 100 ];then
        echo "$Date: $Hostname_Ip 記憶體可用量不足100M並且Swap空間佔用超過100M,記憶體當前剩餘: $Mem_Free,Swap空間使用達到: $Swap_used"
    fi
    sleep 5
done

3.磁碟監控例項

[root@zabbix ~]# vim /scripts/df.sh
#!/bin/bash
Hostname_Ip=$(hostname)_$(hostname -I|awk '{print $2}')
Date=$(date +%F)
while true
do
    Disk_Used=$(df -h | awk '/\/$/ {print $5}')
    if [ ${Disk_Used%\%} -gt 90 ];then
        echo "$Date: $Hostname_Ip 磁碟可用量不足10%,當時已使用: $Disk_Used"
    fi
    sleep 5
done

4.監控nginx程序

#前面的課程中,我們學習了使用指令碼+定時任務的方法自動備份並將檢查結果,發到指定郵箱,那麼這裡,我也可以使用指令碼+定時任務的方法,進行監控,並使用郵件報警

#!/bin/bash
nginx_process=`ps -ef|grep -c [n]ginx`
if [ $nginx_process -lt 2 ];then
    echo "目前nginx程序數是:$nginx_process"|mail -s "完犢子nginx掛了" ****@qq.com
fi

5.注意

#以上指令碼監控,單臺伺服器或少量伺服器可以使用,但是遇到大型架構伺服器數量很多,使用該方法並不適用,所以我們要使用第三方工具進行監控 zabbix

zabbbix  1.0 ~ 5.0
zabbix		2.X		#版本太老,功能低下
zabbix		3.X		#改動很多,增加新功能很多
zabbix		4.X		#沒有太多改動

三、zabbix安裝

1.zabbix架構

1.Zabbix agents 部署在被監控目標上,用於主動監控本地資源和應用程式,並將收集的資料傳送給 Zabbix server

2.Zabbix server 是 Zabbix軟體的核心元件,agent 向其報告可用性、系統完整性資訊和統計資訊。server也是儲存所有配置資訊、統計資訊和操作資訊的核心儲存庫。

3.資料庫:所有配置資訊以及 Zabbix 採集到的資料都被儲存在資料庫中

4.zabbix web 為了從任何地方和任何平臺輕鬆訪問 Zabbix ,我們提供了基於 web 的介面。該介面是 Zabbix server 的一部分,通常(但不一定)和 Zabbix server 執行在同一臺物理機器上。

5.Zabbix proxy 可以代替 Zabbix server採集效能和可用性資料。Zabbix proxy在Zabbix的部署是可選部分;但是proxy的部署可以很好的分擔單個Zabbix server的負載。

2.配置官方源安裝

1)配置官方源

[root@zabbix ~]# rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm

[root@zabbix ~]# ll /etc/yum.repos.d/
total 12
-rw-r--r--. 1 root root 2523 Jul  6 22:19 CentOS-Base.repo
-rw-r--r--. 1 root root  664 Jul  6 22:19 epel.repo
-rw-r--r--  1 root root  633 Oct  7  2019 zabbix.repo

2)開啟倉庫

#Zabbix 前端需要額外的基礎安裝包。 您需要在執行 Zabbix 前端的系統中啟用可選 rpms 的軟體倉庫

#安裝命令
[root@zabbix ~]# yum install -y yum-utils
[root@zabbix ~]# yum-config-manager --enable rhel-7-server-optional-rpms
Loaded plugins: fastestmirror

3)安裝zabbix

[root@zabbix ~]# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent

3.第三方源安裝

1)配置第三方源

[root@zabbix ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm

2)安裝zabbix

[root@zabbix ~]# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent

4.安裝資料庫

[root@zabbix ~]# yum install -y mariadb-server

5.配置資料庫

[root@zabbix ~]# systemctl start mariadb
[root@zabbix ~]# systemctl enable mariadb

[root@zabbix ~]# mysql
MariaDB [(none)]> create database zabbix charset utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all on *.* to zabbix@'localhost' identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)

6.配置zabbix連線資料庫

[root@zabbix ~]# grep "^DB" /etc/zabbix/zabbix_server.conf 
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix

7.匯入初始資料庫

[root@zabbix ~]# zcat /usr/share/doc/zabbix-server-mysql-4.0.24/create.sql.gz | mysql -u root -p zabbix

[root@zabbix ~]# mysql
MariaDB [(none)]> use zabbix
Database changed

MariaDB [zabbix]> show tables;
... ...
144 rows in set (0.00 sec)

8.啟動zabbix服務

[root@zabbix ~]# systemctl start zabbix-server.service 
[root@zabbix ~]# systemctl enable zabbix-server.service

9.啟動httpd

#修改時區
[root@web02 ~]# vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai

[root@zabbix ~]# systemctl start httpd
[root@zabbix ~]# systemctl enable httpd

10.web頁面訪問zabbix

http://10.0.0.71/zabbix/index.php
#按照流程配置

#預設登入使用者名稱密碼:
Admin
zabbix

11.啟動agent

[root@zabbix ~]# systemctl start zabbix-agent.service

四、監控一臺遠端主機

1.安裝zabbix客戶端

[root@web01 ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.1-1.el7.x86_64.rpm

2.配置客戶端

[root@web01 ~]# grep ^Server /etc/zabbix/zabbix_agentd.conf
Server=172.16.1.71
ServerActive=172.16.1.71
Hostname=web01

3.啟動客戶端

[root@web01 ~]# systemctl start zabbix-agent.service 
[root@web01 ~]# systemctl enable zabbix-agent.service

#驗證啟動
[root@web01 ~]# netstat -lntp     
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      39529/zabbix_agentd

4.server端配置監控

1.新增主機組
2.建立主機
3.選擇主機模板
4.新增主機

五、資料庫拆分

1.環境準備

主機 IP 角色
zabbix 172.16.1.71,10.0.0.71 zabbix-server
db01 172.16.1.51 mysql

2.搭建新的資料庫

[root@db01 ~]# yum install -y mariadb-server

3.授權資料庫

[root@db01 ~]# systemctl start mariadb
[root@db01 ~]# systemctl enable mariadb
[root@db01 ~]# mysql
MariaDB [(none)]> grant all on *.* to zabbix@'172.16.1.%' identified by '123';
Query OK, 0 rows affected (0.00 sec)

4.匯出源資料庫資料

[root@zabbix ~]# mysqldump -B zabbix > /tmp/zabbix.sql

5.將資料匯入新庫

[root@zabbix ~]# mysql -uzabbix -p -h172.16.1.51 < /tmp/zabbix.sql 
Enter password:

6.修改zabbix連線資料庫配置

[root@zabbix ~]# grep "^DB" /etc/zabbix/zabbix_server.conf 
DBHost=172.16.1.51
DBName=zabbix
DBUser=zabbix
DBPassword=123

7.修改zabbix-web端資料庫配置

[root@zabbix ~]# vim /etc/zabbix/web/zabbix.conf.php 
<?php
// Zabbix GUI configuration file.
global $DB;

$DB['TYPE']     = 'MYSQL';
#修改資料庫地址
$DB['SERVER']   = '172.16.1.51';
$DB['PORT']     = '0';
$DB['DATABASE'] = 'zabbix';
$DB['USER']     = 'zabbix';
#修改遠端連線密碼
$DB['PASSWORD'] = '123';

// Schema name. Used for IBM DB2 and PostgreSQL.
$DB['SCHEMA'] = '';

$ZBX_SERVER      = 'localhost';
$ZBX_SERVER_PORT = '10051';
$ZBX_SERVER_NAME = 'Linux脫產9期';

$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;

8.重啟訪問

[root@zabbix ~]# systemctl restart zabbix-server.service

9.停止舊庫

[root@zabbix ~]# systemctl stop mariadb