簡單介紹下zabbix的基礎,便於後期學習與回顧,建議閱讀官方文檔。有問題想到的第一點就是官方文檔。php
一.zabbix介紹 html
1. Zabbix是一個企業級的、開源的、分佈式的監控套件。Zabbix能夠對網絡和服務進行監控。 Zabbix利用靈活的告警機制,可實現微信、短信和郵件的自動報警。Zabbix利用存儲的監控數據提供監控報告及實現圖形化顯示。前端
2. 全部的Zabbix報告均可以經過配置參數在WEB界面進行訪問。你能夠經過Web界面實時查看網絡和服務的監控情況。 無論你是小型組織仍是大規模的公司,Zabbix均可以經過不通的配置來扮演監控你的IT基礎框架的角色。 3. 其餘監控軟件,如Cacti,Nagios,Open-falcon(小米公司開源監控)Prometheus(普羅米修斯)等。node
二.zabbix特性
1. 數據收集
2. 靈活的閾值
3. 高級告警配置
4. 實時繪圖
5. 擴展的圖形化展現
6. 歷史數據存儲
7. 配置簡單
8. 網絡自動發現,自動註冊
三.zabbix監控項
對主機可監控項包括:
Memory:內存使用率,可交換內存/虛擬內存使用率
Network:網絡傳輸、網絡故障、丟包
Disk:磁盤使用率,磁盤I/O
Service:進程監控、界面服務、TCP端口鏈接,響應時間、DNS監控、NTP監控
Log:日誌監控,文本日誌,事件日誌(主要是error)
File:文件監控
Other:性能計數器(僅限於Windows系統)
四.zabbix組件
Zabbix各組件的說明:
Zabbix Server爲核心組件,用來獲取agent存活情況及監控數據。全部的配置、統計、操做數據均經過Server進行存取到database
Zabbix database
全部的Zabbix數據均存儲在數據(mysql,oracle,PGSQL(postgreSQL),IBM DB2,SQLite)
Web GUI
爲了更簡單的無障礙的訪問Zabbix, 因此提供了web接口。該接口做爲Zabbix Server的一部分,一般和server運行在同一臺主機上
注意:若是採用SQLite做爲數據庫,web接口和Zabbix Server必須運行在同一臺主機上
Proxy
Zabbix Proxy可以代替Zabbix Server進行性能及可用性數據採集。Proxy是Zabbix部署的可選組件。 若是想分擔單一Zabbix Server負載,推薦使用proxy。
Agent
Zabbix agents 部署在目標監控機上並監控本地資源和應用,將收集數據彙報給Zabbix Server
一般監控流程:
經過zabbix監控數據流,並採起相應的措施。
首先要建立一個host,再建立一個item來蒐集數據
經過item來建立觸發器(trigger)
經過觸發器(trigger)來建立一個動做(action)
例如:若是你想監控一個服務器的CPU負載情況,你首先爲該服務器建立一個主機條目,其次是建立一個item來監控服務器的CPU情況,並建立相應的觸發機制,當cpu負載達到某個閥值,觸發操做,該操做包括執行設定的動做和發送郵件報警。
五.zabbix經常使用術語
1. 主機(host)一個你想監控的網絡設備(須要知道IP/DNS)
2. 主機組(host group)一個邏輯的主機組,它包含主機和模板。主機和模板在同一個主機內的話模板不能被link到其餘上。主機組一般用於給不一樣的用戶組建立訪問權限
3. 監控項(item)從主機中收集到的數據
4. 觸發器(trigger)一個邏輯表達式,用來表達從監控項獲取的數據達到了預設的故障閥值,當接收到的監控值達到了預設的閥值,則觸發器狀態由’OK’變動爲’Problem’,當收到的監控值低於閥值,則狀態保持/變動爲’OK’
5. 事件(event)一個事情發生如觸發器狀態變動或一個自動發現(discovery)/agent自動註冊等
6. 動做(action) 當一個事件發生時預設的處理過程
一個動做(action)包括操做(operations,如發送告警)和條件(當指定的操做完成)
7. 告警升級(escalation)在動做中一個自定的操做執行過程,一個發送告警/執行遠程命令的隊列
8. 媒介(media)發送告警的渠道
9. 通知(notification)經過媒介(media)渠道發送事件的消息
10. 遠程命令(remote command)當監控主機達到某些條件(condition)後預設的自動執行的命令
11. 模板(template)一組包含監控項、觸發器、繪圖、面板(screen)、應用、低級別自動發現規則等而且能被其餘主機應用的實體模板可以提高主機部署監控任務的速度,同時也很是容易對監控任務作批量(mass)更新。模板被主機連接(link).
12. 應用(application)監控項邏輯組
六.部署zabbix
1.前期規劃
192.168.239.128 zabbix-server
關閉防火牆
systemctl status firewalld
systemctl stop firewall
systemctl disable firewall
selinux
臨時生效:setenforce 0
永久生效:修改配置文件
vim /etc/sysconfig/selinux
vim /etc/selinux/config
本地解析DNS
echo "192.168.239.128 zabbix-server" >> /etc/hosts
tail -1 /etc/hosts
主機名
hostnamectl set-hostname zabbix-server
安裝經常使用的軟件
yum install net-tools(網絡工具) bash-- completion(補全工具) wget(下載) vim ntpdate(時間同步) -y
2.安裝LAMP環境
yum install httpd mariadb mariadb-server php php-mysql php-gd -y
3.安裝zabbix yum源
yum install -y http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-1.el7.centos.noarch.rpm
[root@zabbix-server yum.repos.d]# ls /etc/yum.repos.d/
zabbix.repo
4.安裝zabbix server
yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent -y
修改PHP時區爲亞洲上海
[root@zabbix-server ~]# vim /etc/httpd/conf.d/zabbix.conf
修改此行爲
#php_value date.timezone Europe/Riga
php_value date.timezone Asia/Shanghai
5.數據庫相關配置
mysql_secure_installation初始化數據庫設置密碼爲123456
mysql -uroot -p123456
進入數據庫後建立zabbix數據庫
create database zabbix character set utf8;
並受權zabbix用戶
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
刷新權限表
flush privileges;
導入默認的zabbix數據庫信息
zcat命令用於不真正解壓縮文件,就能顯示壓縮包中文件的內容的場合。
cd /usr/share/doc/zabbix-server-mysql-3.4.14/
zcat create.sql.gz | mysql -uzabbix -p zabbix
進入數據庫查看是否有相應的信息
mysql -uzabbix -pzabbix
use zabbix;
show tables;
6.修改zabbix配置文件(注意備份)
vim /etc/zabbix/zabbix_server.conf
修改以下幾行:
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
7.啓動zabbix及apache
systemctl restart zabbix-server.service httpd.service
systemctl status zabbix-server.service httpd.service
systemctl enable zabbix-server.service httpd.service
netstat -lnupt | egrep '80|10051'
8.訪問頁面
http://192.168.239.128/zabbix/
七.zabbix界面介紹
- Monitoring監控項
- Inventory資產清單
- Report報告
- Configuration配置
- Administration用戶管理
- Host groups至關於給機器分組,按部門分組,針對中航金網的能夠分爲aecc-mall_jvm,EasyDB,Easylog,eavic_jvm,IDC linux,IDC windows,Zabbix servers,專線帶寬(交換機),差旅隨行,數據庫,航發電子招投標,航髮網上商城,航發電子投招標,航空電子採購平臺;分組的意義在於易於管理主機。
- Templates 模板,中航金網的模板主要是Templete DT JVM7_JSTAT,Templete DT Linux,Templete DT Windows,Templete Net Mikrotik SNMPv2我理解的是,機器的話無外乎linux,windows這兩種居多,能夠針對linux的機器作出一份模板,能夠直接套用,減小乾重復的工做,效率高。
- 模板裏的Applications也相似於分組,針對linux這個系統,對監控項進行分類,主要監控這幾個層次系統層面,網絡層面等。(cpu,內存,swap,tcp state,文件,進程數,殭屍進程,系統負載),針對重要的監控項作出合理的觸發器。
- item中的key,是由key+參數組成(以linux的模板爲例)
1. cpu層面
- cpu.total.used.time
- system.cpu.load
- system.cpu.util
- system.cpu.num
2. 內存方面
- vm.memory.size(總的,可用的,剩餘的,百分比)
-system.swap.size(總的,剩餘)
3. 進程方面
- proc.num
4. 文件檢查(是否修改)
- vfs.file.cksum
5. 網絡層面
- tcp_state.sh(tcp狀態監聽,鏈接創建,監聽,等待時間,關閉時間)
6. 系統層面
- system.uname
- system.uptime
- system.hostname
7. 內核層面
- kernel.maxfiles
- kernel.maxproc
8. jvm相關
- GC(garbage collection)垃圾回收
- PermSize設置非堆內存
- 年輕代(Young Gen)
9.windows
- system.uname
- system.uname
- vm.memory.size
- system.swap.size
- proc.num
- per_counter
- trigger每個觸發器僅能關聯至一個監控項,但能夠爲一個監控項同時設置多個觸發器。
- 表達式
`{{<server>:<key>.<function>(<parameter>)}<operator><constant>`
- {主機:key.函數(參數)}<表達式>常數
- 1.觸發器名稱:/etc/passwd has been changed
- 使用函數 diff():
- {www.zabbix.com:vfs.file.cksum[/etc/passwd].diff(0)}>0
/etc/passwd最新的checksum與上一次獲取到的checksum不一樣,表達式將會返回true.
- action(動做)操做和條件組成。
八.zabbix和grafana結合
- Grafana 是 Graphite 和 InfluxDB 儀表盤和圖形編輯器。Grafana 是開源的,功能齊全的度量儀表盤和圖形編輯器,支持 Graphite,InfluxDB 和 OpenTSDB。Grafana 主要特性:靈活豐富的圖形化選項;能夠混合多種風格;支持白天和夜間模式;
多個數據源;Graphite 和 InfluxDB 查詢編輯器等等。
- 1.安裝
- 官方文檔:http://docs.grafana.org/installation/rpm/
- wget https://- -grafanarel.s3.amazonaws.com/builds/grafana-4.1.2-1486989747.x86_64.rpm
- 2.啓動服務
- systemctl daemon-reload
- systemctl start grafana-server
- systemctl status grafana-server
- systemctl enable grafana-- server.service
- 3.安裝相關軟件包
- yum install freetype*
- yum install fontconfig -y
- yum install urw-fonts -y
- 4.訪問頁面
- http://ServerIP:3000
- 默認登陸用戶名密碼:admin/admin
- 結合zabbix須要安裝相應的包
- 獲取可用插件列表:grafana-cli plugins list-remote
- 安裝grafana-zabbix插件:grafana-cli plugins install alexanderzobnin-zabbix-app
- 安裝grafana-clock-panel插件:grafana-cli plugins install grafana-clock-panel
- 重啓服務:systemctl restart grafana-server
# 九.zabbix優化
1.能夠經過修改zabbix_server.conf配置文件
StartPollers=5
默認爲5,輪詢器實例數量,通常規則保持此參數的值儘量低。zabbix_server的每一個附加實例都會添加已知的開銷, 同時,並行性增長。當隊列平均包含最小參數數量(理想狀況下,在任何給定時刻爲0)時,實現最佳實例數。
StartPollersUnreachable=1
默認爲1,不可達主機 (包括IPMI 和 Java)的輪詢器實例數量
StartTrappers=5
默認爲5,trappers進程實例數量。Trappers接受來自Zabbix發送者、主動agents和主動proxies的傳入鏈接。 至少要運行一個trapper進程來顯示前端的服務器可用性和視圖隊列。
StartPingers=1
默認爲1,ICMP pingers進程實例數量
StartDiscoverers=1
CacheSize=8M
默認爲8M,緩存大小,用於存儲主機、監控項、觸發器數據的共享內存大小。內存溢出問題須要調節此參數
StartDBSyncers=4
HistoryCacheSize=16M
默認爲16M,歷史緩存數據大小.存儲歷史數據.
TrendCacheSize=4M
默認爲4M,趨勢緩存的大小,用於存儲趨勢數據的共享內存大小。
還有一些其餘的參數也能夠調整,能夠自行根據本身的服務器性能自行調大。
2.數據庫層面的優化
對數據庫自己的參數進行調優(my.cnf)
對zabbix數據庫的結構進行優化(分表)
注意:在進行分表操做的時候,須要關閉housekeeper
3.zabbix架構優化(node模式(不經常使用,已經淘汰),proxy模式)
4.監控項和報警項的優化
監控項越多,對zabbix數據庫和它自己的性能的考驗就越大。精簡監控項,只監控必要的監控項,對運維沒有幫助的監控項能夠取消,以減小系統資源的浪費,監控項的類型最好使用數字,儘可能避免使用字符。字符在數據庫中的存儲空間使用較大,在設置trigger時也相對麻煩,而且zabbix自己處理數字的效率要相對高。若是業務須要字符類型的監控項,能夠適當的下降數據採集的時間間隔以提升處理效率。Trigger中,正則表達式函數last(),nodata()的速度最快,min()、max()、avg()的速度最慢。在使用過程當中,儘可能選擇速度較快的函數。配置Trigger時,也應注意使用正確的邏輯,錯誤的邏輯可能致使數據庫查詢較慢的現象。
# 十.所涉及到的知識點
- SNMP協議
- 參考博客:http://www.cnblogs.com/xdp-gacl/p/3978825.html
- SNMP是英文"Simple Network Management Protocol"的縮寫,中文意思是"簡單網絡管理協議"。SNMP是一種簡單網絡管理協議,它屬於TCP/IP五層協議中的應用層協議,用於網絡管理的協議。SNMP主要用於網絡設備的管理。因爲SNMP協議簡單可靠 ,受到了衆多廠商的歡迎,成爲了目前最爲普遍的網管協議。
- SNMP協議主要由兩大部分構成:SNMP管理站和SNMP代理。
- MIB(管理信息庫):管理信息(MIB)庫能夠理解成爲agent維護的管理對象數據庫,MIB中定義的大部分管理對象的狀態和統計信息均可以被NMS訪問。MIB是一個按照層次結構組織的樹狀結構,每一個被管對象對應樹形結構的一個葉子節點,稱爲一個object,擁有惟一的數字標識符。
- IPMI
- IPMI(Intelligent Platform Management Interface)是一個智能平臺管理接口。
- JMX
- JMX的全稱爲Java Management Extensions. 顧名思義,是管理Java的一種擴展。這種機制能夠方便的管理、監控正在運行中的Java程序。經常使用於管理線程,內存,日誌Level,服務重啓,系統環境等。
- JVM
- JVM是Java Virtual Machine(Java虛擬機)的縮寫,JVM是一種用於計算設備的規範,它是一個虛構出來的計算機,是經過在實際的計算機上仿真模擬各類計算機功能來實現的。mysql