Zabbix
第一章 監控系統
爲什麼需要監控系統? 爲用戶提供文檔、高校、安全的服務
監控系統功能:數據採集、數據保存、圖像展示、報警系統(告警策略、告警發送)
收集數據可以通過客戶端、SNMP協議等
監控系統的組成
如何選擇監控系統?
第二章 Zabbix功能與架構
Zabbix功能
Zabbix數據收集的方式
- Agent 多平臺部署 (centos ubuntu)
- 支持SNMP和IPMI(網絡設備 打印機 ups等)
- 支持無agent監控(tcp udp)
- 自定義監控 (可執行腳本)
- 支持監控計算和聚合
- Web事務監控
Zabbix數據展示
- 圖表及監控大屏
- 網絡拓撲圖
- 幻燈片圖表
- 圖片展示插件
Zabbix故障檢測
- 故障預警
- 故障規則和恢復規則獨立
- 多個告警規則組合
- 與歷史數據對比分析告警
- 支持數據波動規則
- 告警依賴關係
Zabbix告警發送
- 發送告警信息
- 自動修復故障(在告警的時候執行腳本)
- 告警升級
- 自定義告警信息
- 告警關聯
Zabbix安全和認證
- 加密通信
- 統一認證
- 權限管理
Zabbix自動化
- 網絡自動發現
- 低級別自動發現(LLD)
- Agent自動註冊
Zabbix API
- 自動化配置管理
- 與第三方系統結合
Zabbix4.0特性
- 性能提升10%-20%
- 分佈式網絡帶寬降低80%
- 與ES haddoop kafka
- 告警處理流程提升
- 支持Http Agent
- Tag多個功能支持
- 支持單點登錄
Zabbix架構
Zabbix Agent:Zabbix客戶端,負責數據收集上傳
Zabbix Server:Zabbix的服務端,負責數據彙總,處理,告警策略,告警發送等等
Zabbix Web:Zabbix前端頁面,提供了友好的展示和操作界面,負責數據的展示,監控系統的配置管理,用戶權限配置管理等功能
Database:數據和配置存儲數據庫,Zabbix支持多種數據庫,包括MySQL,Oracle,DB2等等
Java GateWay:Java網關,負責通過JMX監控收集Java應用性能數據
Zabbix Proxy:Zabbix代理,分佈式部署架構會用到,主要是收集設備的監控數據並將數據發送給對應的Zabbix Server
流程:數據通過Zabbix客戶端收集併發送給Zabbix服務端,Zabbix服務端負責存儲、分析數據、觸發告警等功能,用戶或管理員可以通過Zabbix前端頁面進行數據展示和配置管理。如果設備規模較多,分佈在多地域、多機房都可以通過Zabbix Proxy實現分佈式架構部署
Zabbix Server組成
數據通過以下這些進程從客戶端收集過來
- Poller進程主要負責Server主動拉取類型的監控數據
- Trapper進程主要負責Agent主動上報的監控數據 Http
- Poller進程主要負責URL監控類型的數據收集
- icmp pinger進程負責ping存活監控數據收集
- java gateway進程負責和java gateway通信處理數據
- java poller進程負責拉取JMX類型數據獲取
- ipmi poller進程負責IPMI類型數據獲取
- timer進程負責處理和時間有關的數據以及告警
- vmware collector進程負責收集vmware虛擬化環境監控數據
- unreachable Poller負責處理無法到達類的監控處理
數據收集之後是通過以下進程進行處理
- preprocessing manager進程會對監控數據進行預處理
- history syncer進程負責將數據分析並保存至數據庫中
- housekeeper進程負責定期清理歷史數據
數據告警
- alerter進程處理髮送告警消息
- alerter manager是負責管理alerter進程
- escalator進程是負責處理告警過程中的各個步驟的,比如有告警升級之類的
分佈式
- prox poller進程負責分佈式通信
自動發現
- discovery process是負責設備自動發現功能的
Zabbix基本術語
組件功能
frontend | 前端 |
Zabbix API | Zabbix的接口 |
Zabbix Server | Zabbix服務端 |
Zabbix Proxy | Zabbix代理 |
Network discovery | 網絡自動發現 |
Active agent auto-registration | 主動Agent自動註冊 |
Low-level discovery | 低級自動發現 |
監控收集
host | 主機 |
host group | 主機組 |
item | 監控項 |
value preprocessing | 預處理 |
template | 模板 |
application | 應用 |
web scenario | web場景 |
Macros | 宏 |
item 監控項,監控 CPU使用率,負責,網卡接收流量等
value preprocessing 監控數據預處理,就是數據再存入數據庫之前按照指定的規則預處理,比如處理成數據的變換量,數據的的每秒變化速率,或者是單位的換算,從ms算成s
application 應用,一組監控項的邏輯分組,比如Nginx的監控項統一分到Nginx應用中
template 模板,就是可以應用多個監控設備的監控集合,包含監控項,觸發器,圖形,LLD,web監控等等。 同一類的監控就可以整理成模板,從而可以重複利用,大幅度提高了監控的效率
web scenario web場景,是監控Web的一個或多個http請求,一個場景中可以是單個URL,也可以是多個URL。 比如可以將用戶登錄,搜索,點擊商品詳情,加入購物車等操作放入一個場景進行監控,當所有的步驟都成功,該場景的監控纔是成功的
Macros 宏,可以認爲是一個變量,可以應用在告警,模板等功能中
數據展示
graph | 圖表 |
screen | 聚合圖表 |
maps | 拓撲圖 |
Slide | 幻燈片演示 |
graph 圖表,可以將一個或多個監控項的監控數據放入同一張圖表中,比如將CPU的用戶使用率、系統使用率、空閒率都放入到PCU監控圖表中
screen 聚合圖表,就是將多個graph聚在一張監控大屏中,比如將CPU、網卡、內存、IO這些圖表放在一起,就組成了主機的聚合圖表
maps 網絡拓撲圖,Zabbix還支持拓撲圖展示監控,並在拓撲圖加入對應的監控指標,當該監控項異常時,拓撲圖也會顯示異常,很方便定位問題
slide show 幻燈片播放,每隔一段時間輪流播放多個聚合圖表,可以實現將主機、網絡、存儲、緩存、數據庫的各個聚合圖表輪流播放
告警相關
Trigger | 觸發器 |
event | 事件 |
problem | 異常狀態 |
OK | 正常狀態 |
action | 操作 |
escalation | 升級 |
media | 媒介 |
notification | 通知 |
remote command | 遠程命令 |
Maintenance | 維護模式 |
Trigger 觸發器,告警的策略設置,可以分別設置正常狀態和異常狀態觸發器,比如CPU持續5分鐘使用率超過80%就觸發告警
event 事件,比如告警狀態的變化,自動發現策略生效,客戶端註冊成功等等這些都是事件,當CPU持續5分鐘使用率超過80%就觸發告警,觸發器狀態會從OK變成Problem,這就是一個事件
action 操作,是根據事件以及條件定義的一系列動作,當CPU告警發生時,可以觸發一個操作,這操作是發送告警信息給管理員,讓他及時處理 。 操作也可以是服務重啓
escalation 升級,是在一個動作內執行的操作,告警的升級操作就是通過這個實現,比如上面的告警信息發送就是一個escalation
media 媒介,指告警通知的方式,短信,郵件,微信等等
remote command 遠程命令,指預先定義的,在指定條件下會被執行的命令
Maintenance 維護模式,就是系統升級或者維護的時間段,該時間段可以不發送告警,或者發送告警,但是不計入服務可用性
認證和權限
User | 用戶 |
User Group | 用戶組 |
permission | 權限 |
User Type | 用戶類型 |
第三章 Zabbix安裝
二進制 源碼 docker 三種安裝方式
資源要求
環境準備
vmware
CentOS 7.6 http://mirrors.163.com/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso
Zabbix二進制安裝
安裝Zabbix服務端
安裝Zabbix前端(php,web server)
安裝Zabbix數據庫
安裝Zabbix客戶端
二進制包是已經經過編譯,可以直接運行的程序軟件。rpm包就是二進制包的一種,二進制包的特點是安裝簡單,方便。缺點可定製性不足
二進制包安裝-命令列表
基礎配置
初始化CentOS 7.6
添加鏡像源、關閉防火牆
centos 7 添加阿里雲鏡像,加速一下操作系統的一些軟件包的安裝,鏡像配置覆蓋操作系統本身
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # wget -O 指定文件名
yum install epel-release # 安裝基礎鏡像裏所不包含的常用的軟件
安裝常用的開發組件
yum groups install "Development Tools"
yum groups info "Development Tools"
增加Zabbix鏡像源
rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
關閉SElinux
systemctl stop firewalld.service
systemctl disable firewalld.service #禁止開機啓動
vim /etc/selinux/config
SELINUX=disabled
yum install iptables-services
開始 安裝Zabbix Server和Frontend和MySQL
安裝Zabbix Server和Frontend
yum install zabbix-server-mysql
yum install zabbix-web-mysql
安裝MySQL mariadb可以是mysql的一個分支,可以理解爲mysql
yum install mariadb-server
systemctl start mariadb.service
systemctl status mariadb.service
mysql_secure_installation # 運行這條命令,進行一些數據初始化設置,我這裏就不設置密碼了,直接回車
創建Zabbix數據庫
mysql -uroot -p
create database zabbix character set utf8 collate utf8_bin;
創建用戶
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix@findsec123';
刷新權限
flush privileges;
導入Zabbix數據庫的表結構以及相關的數據
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -pzabbix@findsec123 zabbix
登進去show databases; use zabbix; show tables;
配置Zabbix Server
vim /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix@findsec123
啓動Zabbix Server
systemctl start zabbix-server.service
systemctl status zabbix-server.service
more /var/log/zabbix/zabbix_server.log
配置Zabbix frontend
vim /etc/php.ini # 有註釋的註釋去掉,數字不同的改掉
max_execution_time = 300
memory_limit = 128M
post_max_size = 16M
upload_max_filesize = 2M
max_input_time = 300
max_input_vars = 10000
always_populate_raw_post_data = -1
date.timezone = Asia/Shanghai
啓動httpd
systemctl start httpd.service
systemctl status httpd.service
http://192.168.93.145/zabbix/setup.php
安裝過程中的數據庫用戶名和密碼是上面所設置的
Zabbix server details的Name:Zabbix Server
用戶名:Admin
默認密碼:zabbix
安裝Zabbix Agent
yum install zabbix-agent
vim /etc/zabbix/zabbix_agentd.conf 檢查三個東西,確認ServerActive和Server是否填寫正確,還有hostname要與之前的保持一致
systemctl start zabbix-agent.service
啓動失敗排查:
5月 11 20:26:05 bogon systemd[1]: zabbix-server.service failed.
[root@bogon ~]# getenforce
Enforcing
[root@bogon ~]# setenforce 0
[root@bogon ~]# getenforce
Permissive
這個名字Zabbix Server要和待會zabbix agent的hostname 需要相匹配
用戶名:Admin
默認密碼:zabbix
systemctl start zabbix-server.service
systemctl start mariadb.service
systemctl start httpd.service
systemctl start zabbix-agent.service
Zabbix源碼包安裝
源碼包是需要進行編譯以後才能夠生成可運行的二進制程序,源碼包它是包含了程序的源代碼。源碼包安裝的特點:可以定製功能和參數。缺點是它需要編譯安裝容易出錯,並且安裝時間消耗較長的時間
docker 主要是基於linux的容器技術,實現的進程級別的虛擬化,將應用和所依賴的庫都封裝在容器當中,對應用來說,資源都是獨立的並且隔離的,由於容器的可持續部署和隔離性,一般在企業的生產環境都是選擇容器,源碼包的安裝方式居多 或者 定製企業自己的二進制包
安裝Zabbix服務端
安裝Zabbix前端(php,web server)
安裝Zabbix數據庫
安裝Zabbix客戶端
Zabbix Server採用源碼包安裝,前端web和數據庫以及agent採用二進制的安裝
源碼包安裝-命令列表
下載zabbix server源碼包
wget -O zabbix-4.0.4.tar.gz https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/4.0.4/zabbix-4.0.4.tar.gz/download
安裝zabbix依賴包
yum install wget telnet net-tools python-paramiko gcc gcc-c++ dejavu-sans-fonts python-setuptools python-devel sendmail mailx net-snmp net-snmp-devel net-snmp-utils freetype-devel libpng-devel perl unbound libtasn1-devel p11-kit-devel OpenIPMI unixODBC libevent-devel mysql-devel libxml2-devel libssh2-devel OpenIPMI-devel java-1.8.0-openjdk-devel openldap-devel curl-devel unixODBC-devel
解壓並編譯安裝
tar -zxvf zabbix-4.0.4.tar.gz
cd zabbix-4.0.4/
建立編譯安裝目錄
mkdir -p /data/findsec/zabbix
./configure --prefix=/data/findsec/zabbix --enable-server --enable-agent --enable-java --with-mysql --with-libxml2 --with-unixodbc --with-net-snmp --with-ssh2 --with-openipmi --with-ldap --with-libcurl --with-iconv
# prefix是指定安裝的目錄,默認是按照到/usr/local下的
# 這裏安裝的是server,所以是 --enable-server 如果是proxy就 enable-proxy
# java監控,mysql後端數據庫,net-snmp網絡監控,openipmi硬件相關的監控,ldap認證,libcurl是web監控
make
make install
cd /data/findsec/zabbix/
tree . 查看zabbix下的目錄結構
驗證安裝是否成功:/data/findsec/zabbix/sbin/zabbix_server -V
可以看道是 4.0.5版本
前端web和數據庫以及agent採用二進制的安裝
數據庫安裝
yum install mariadb-server
systemctl start mariadb.service
systemctl status mariadb.service
mysql_secure_installation 初始化詩句哭
是否設置root密碼 n
是否刪除匿名用戶 Y
是否禁止root遠程登錄 n
刪除測試數據庫 Y
重新加載權限 Y
創建數據庫
mysql -uroot -p
create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix@findsec123';
導入數據結構,zabbix源碼包安裝的數據庫表結構是在源碼包裏面的,導入schema表結構,導入images,導入data
mysql -uzabbix -pzabbix@findsec123 zabbix < /root/zabbix-4.0.4/database/mysql/schema.sql
mysql -uzabbix -pzabbix@findsec123 zabbix < /root/zabbix-4.0.4/database/mysql/images.sql
mysql -uzabbix -pzabbix@findsec123 zabbix < /root/zabbix-4.0.4/database/mysql/data.sql
修改zabbix server配置
vim /data/findsec/zabbix/etc/zabbix_server.conf
檢查DBHost,DBname,DBUser,DBPassword=zabbix@findsec123
增加用戶,zabbix的用戶默認是禁止登錄
groupadd --system zabbix
useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix
啓動服務
幫助查看:/data/findsec/zabbix/sbin/zabbix_server -h
指定zabbix server的配置文件並啓動:/data/findsec/zabbix/sbin/zabbix_server -c /data/findsec/zabbix/etc/zabbix_server.conf
tailf /tmp/zabbix_server.log
增加Zabbix鏡像源
rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
安裝Zabbix Frontend
yum install zabbix-web-mysql
配置Zabbix frontend
vim /etc/php.ini
max_execution_time = 300
memory_limit = 128M
post_max_size = 16M
upload_max_filesize = 2M
max_input_time = 300
max_input_vars = 10000
always_populate_raw_post_data = -1
date.timezone = Asia/Shanghai
啓動httpd
systemctl start httpd.service
systemctl status httpd.service
http://xxx.xxx.xxx.xxx/zabbix/setup.php
Admin
zabbix
安裝Zabbix Agent
yum install zabbix-agent
systemctl start zabbix-agent.service
————————————————————————————————————————————————————————————————————————
補充一下如果想要agent源碼安裝:
上面在 ./configure 已經 --enable-agent
查看zabbix server的日誌:tailf /tmp/zabbix_server.log
檢查agent.conf配置文件
/data/findsec/zabbix/etc/zabbix_agentd.conf
確認hostname=Zabbix server和日誌看到的是一致的,檢查Server和ServerActive
啓動zabbix agent並指定agent配置文件
/data/findsec/zabbix/sbin/zabbix_agentd -c /data/findsec/zabbix/etc/zabbix_agentd.conf
查看zabbix agent的日誌:tailf /tmp/zabbix_agentd.log
ps aux|grep zabbix_agentd
Zabbix容器安裝
docker 主要是基於linux的容器技術,實現的進程級別的虛擬化,將應用和所依賴的庫都封裝在容器當中,對應用來說,資源都是獨立的並且隔離的,由於容器的可持續部署和隔離性,一般在企業的生產環境都是選擇容器,源碼包的安裝方式居多 或者 定製企業自己的二進制包
#yum install docker-latest
#docker -h 查看幫助
#systemctl start docker-latest
#systemctl status docker-latest
#docker ps
如果沒安裝會從容器中拉取,然後再安裝
安裝Apache
把容器的80端口映射到本地的80端口
#docker run -d -p 80:80 httpd
#docker ps
安裝mysql
#docker run --name mysql-server -t -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix@findsec123" -e MYSQL_ROOT_PASSWORD="zabbix@findsec123" -d mysql:5.7 --character-set-server=utf8 --collation-server=utf_bin
安裝zabbix-java-gateway
#docker run --name zabbix-java-gateway -t -d zabbix/zabbix-java-gateway:latest
容器之間的通信
安裝zabbix-server
#docker run --name zabbix-server-mysql -t -e DB_SERVER_HOST="mysql-server" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix@findsec123" -e MYSQL_ROOT_PASSWORD="zabbix@findsec123" -e ZBX_JAVAGATEWAY="zabbix-java-gateway" --link mysqlserver:mysql --link zabbix-java-gateway:zabbix-java-gateway -p 10051:10051 -d zabbix/zabbix-server-mysql:latest
#docker ps
安裝前端
#docker run --name zabbix-web-nginx-mysql -t -e DB_SERVER_HOST="mysql-server" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix@findsec123" -e MYSQL_ROOT_PASSWORD="zabbix@findsec123" --link mysql-server:mysql --link zabbix-server-mysql:zabbix-server -p 80:80 -d zabbix/zabbix-web-nginx-mysql:latest
安裝agent
#docker run --name zabbix-agent -e ZBX_HOSTNAME="Zabbix server" -e ZBX_SERVER_HOST="zabbix-server-mysql" --link zabbix-server-mysql:zabbix-server -d zabbix/zabbix-agent:latest
驗證mysql
# docker exec -it mysql-server /bin/bash
root@2da13db7bb0f:/# mysql
root@2da13db7bb0f:/# mysql -uroot -pzabbix@findsed123
Zabbix前端介紹
zabbix前端是和用戶交互的媒介,主要包含了監控數據的查看配置管理監控報表等相關的功能,對於一個監控系統來說,前端頁面的功能是否豐富,是否易用,數據展示是否多樣等這些因素它都會影響監控系統的使用和普及程度。
修改中文。建立使用英文, 不推薦修改,知道一下這種方法。
Monitoring 監控數據相關信息
Inventory 資產配置(多少監控設備,然後監控設備的一些基本信息)
Reports 報表(包含了一些監控系統的信息、可用性的報告、告警top 100、審計日誌)
Report中Action log 產生告警 會觸發action操作 都會記錄在這
Configuration下Event correlation 事件的關聯.用於解決告警風暴,即服務器宕機只會發送宕機報 警,不會發送服務器端口不可用等一系列問題.
Configuration下Service 用來衡量soa
Administration 下面的Queue,用來查看是否有監控項的數據,最近一段時間都沒有收到數據
Configuration(包括主機,主機組模板,主機,維護模式,操作,告警事件關聯,自動發現功能和服務)
Administration(主要包含了zabbix的一些管理功能,包括了一些proxy的配置、認證方式的配置,用戶和用戶組,用戶的媒介,腳本,隊列)
後期會研究研究,準備弄深信服 翔鷹計劃,暫時停更哦