開源監控工具
zabbix zennos opennms cacti nagios ganglia
zabbix
(功能)數據採集-->數據存儲-->數據展現和分析-->報警
數據採集:
SNMP
agent
ICMP/SSH/IPMI
數據存儲:
cacti:rrd(rrdtools)
nagios:(默認不保存數據),mysql
zabbix:mysql/pgsql/oracle
數據展現(web):
(獲取數據後繪圖)
報警:採集到的數據超出閾值(報警自己不是監控系統自身完成,只是觸發外在可以執行報警的媒介)
mail(smtp)
Chat Message即時信息
SMS
jabber(即時通訊協議)
command execution 命令執行
SNMP:simple network mangement protocol
SNMP:工做模式:
NMS向agent採集數據
agent向NMS報告數據
NMS請求agent修改配置
SNMP組件:
MIB:mangement information base 管理信息庫
SMI:MIB表示符號
SNMP協議
NMS可發起的操做:
Get GetNext Set Trap
agent:Respose
UDP:
NMS:162
agent:161
狀態碼:
200:OK 表示客戶端請求成功
400:Bad Required 因爲客戶端請求有語法錯誤,不能被服務器所理解
401:Unauthorized 請求未經受權,這個狀態碼必須和www-Authorized報頭域一塊兒使用
403:Forbidden 服務器收到請求,但拒絕提供服務,服務器一般會在響應正文中給出不提供服務的緣由
404:NotFound 請求的資源不存在,如輸入了錯誤的URL
500:Internal Server Error 服務器發生不可預期的錯誤,致使沒法完成客戶的請求
503:服務器當前不可以處理客戶端的請求
--------------------------------------------------------------------------------------
zabbix採集:
zabbix agent
agent(active)
SNMP
SSH
zabbix存儲:
用RDBMS保存(mysql/oracle)
zabbix展現:
PHP,web GUI
zabbix報警:
報警升級
肯定zabbix監控對象
手動添加
自動發現
hosts(主機),hosts group(主機組)
item,application ---在線否,主機的資源,服務的鏈接情況,網絡相關統計數據等
item:key ---在agent端key值不能重複
graph展現,screen(滿屏展現)
trigger:定義一個數據指標的域值 event(事件):trigger能夠生成event
action:notifiction,operation,condition
可監控的項:
CPU:load average,CPU Utilization
memory:memory utilization,swap/pagefile utilization
network:network transfer,network error/drop packet
disk:filesystem utilization,disk I/O
service:process monitoring,windows server,tcp port connectivity,tcp port response time,DNS monitoring,ntp monitoring
log:text log,eventlog
file:file monitoring
other:perforance counter
web監控:response time 響應時間
download speed 下載速度
response code 響應代碼
avaliability of certain content 獲取特定要求的內容
complex web scenarios with logi and logout capability
support for http and https
---------------------------------------------------------------------------------------
zabbix經常使用術語:
主機
主機組
監控項
觸發器
事件:event ,發生的一個值得關注的事情,如觸發器狀態轉變,新的agent或從新上線的agent自動註冊
動做:只對於特定事件事先定義的處理方法,一般包含操做(如發送通知)和條件(合適執行操做)
報警升級:發送報警或執行遠程命令的自定義方案
媒介:發送通知的手段或通道,如Email,Jabber,SMS
通知:經過選定的媒介向用戶發送的有關某事件的信息
遠程命令:remote command 預約義的命令可在被監控主機處於某特定條件下時自動執行
模板:用於快速定義被監控主機的預設條目集合,一般包含了item,trigger,graph,screen,application,以及low-level discovery rule,模板能夠直接連接到單個主機
應用:item的集合
web場景:用於檢測web站點可用性一個 或多個HTTP請求
Frontend:zabbix的web接口
item(監控項):僅負責收集數據;某指標對應的數據超出合理範圍給相關人員發出警告信息
trigger(觸發器):
一個觸發器只能關聯一個監控項,但一個監控項能夠同時使用多個觸發器;爲一個監控項定義多個具備不一樣閾值的觸發器,能夠實現不一樣級別的報警功能;
一個觸發器有一個表達式構成,定義了監控項所採起的數據的一個閾值;
一旦採集的數據超出了此觸發器定義的閾值,觸發器狀態會裝換爲「problem」;當採集的數據再次迴歸至合理範圍是,其狀態從新返回到「OK」;
觸發器表達式:
{<server>:<key>.<function>(<parameter>)}<operator><constant>
server:主機名
function:評估採集到的數據是否在合理範圍內所使用的函數:
支持的函數:avg,count(計數),change(改變的值的大小),date(時間),dayofweek(星期*),delta(計算二者間的差值),diff(比較),
iregexp(基於正則表達式去匹配),last(最後*採集到的值),max,min,nodate(沒有采集到數據),now,sum等
parameter:函數參數:在數值參數前使用#做爲前綴,則表示爲最近幾回的取值
eg:sum(300)表示300秒內全部取值之和,而sum(#10)表示最近10次取值之和
avg,count,last,min,max支持使用第二參數,用於完成時間限定:eg:max(1h,7d)表示返回一週以前的1h內的最大值
operator:操做符:/ * - +(算術運算) < > #(不等於) = &(與) |(或)
constant:常數值
示例:{www.magedu.com:system.cpu.load[all,avg1].last(0)}>3
表示主機www.magedu.com上全部cpu的過去1分鐘的平均負載的最後一次取值大於3時將觸發狀態轉換
last(0)至關於last(#1)
宏(macros):
抽象,根據一系列預約義的規則替換必定的文本模式,解釋器或編譯器在遇到宏是會自動進行模式替換(保存了字符型的數據的變量)
zabbix基於宏保存預設文本模式,而且在調用時將其替換爲其中的文本;內置的宏,如:{HOST.NAME},{HOST.IP}
支持在全局,模板,主機級別使用用戶自定義宏
宏能夠應用在:item keys 和 description,trigger名稱和表達式,主機接口IP/DNS以及端口,discovery 機制的SNMP協議的相關信息中
zabbix server processes:zabbix server端啓動的進程
watchdog:監控全部的進程
housekeeper:按期清理數據
alerter:報警
poller:從被監控端獲取數據
httppoller:監控web頁面(如響應時間,下載速速...)的專用poller
discoverer:發現
pinger:經過ping探測節點是否在線
db_config_syncer:數據庫的配置同步器
db_data_syncer:數據庫的數據同步器
nodewatcher:監控節點
timer:計時器
escalator:報警升級
--------------------------------------------------------------------------
zabbix安裝配置:
(1)安裝數據庫
# yum install mariadb-server
MariaDB [(none)]> create database zabbix default charset utf8;
MariaDB [(none)]> grant all on zabbix.* to zabbix@'localhost' identified by'123';
或MariaDB [(none)]> grant all on zabbix.* to zabbix@'192.168.1.%' identified by'123';
MariaDB [(none)]> flush privileges;
(2)安裝zabbix
# yum install zabbix-server-mysql zabbix-web-mysql zabbix
# yum install zabbix-server zabbix-agent zabbix-web zabbix-get zabbix-sender
(3)導入數據庫(按順序導入)
# mysql zabbix < /usr/share/doc/zabbix-server-mysql-2.4.6/create/schema.sql
# mysql zabbix < /usr/share/doc/zabbix-server-mysql-2.4.6/create/images.sql
# mysql zabbix < /usr/share/doc/zabbix-server-mysql-2.4.6/create/data.sql
在centos7.3上,zabbix3.2版本
# zcat /usr/share/doc/zabbix-server-mysql-3.2.6/create.sql.gz |mysql -uzabbix -p123 zabbix
(4)修改配置文件
# vim /etc/zabbix/zabbix_server
ListenPort=10051
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=123
DBSocket=/var/lib/mysql/mysql.sock
# service zabbix-server restart
(5)配置zabbix的httpd子配置文件
# vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai
# service httpd restart
【# vim /etc/php.ini
date.timezone = "Asia/Shanghai"
】
(6)瀏覽器訪問,並安裝
1,welcome
2,Check of pre-requisites
3,Configure DB connection ---數據庫用戶名填zabbix,密碼填123(前面受權過的),並test connection成功
4,Zabbix server details ---在name選項填上你zabbix服務器的IP或者主機名
5,Pre-Installation summary
6,install
登錄用戶名爲:admin 登錄密碼爲:zabbix (默認)
(7)zabbix-agent端
# yum install zabbix-agent zabbix-sender zabbix
# vim /etc/zabbix/zabbix_agentd.conf
Server=127.0.0.1 ---zabbix服務器的IP
ServerActive=127.0.0.1 ---zabbix服務器active check相關
ListenPort=10050
Hostname=node1.cluster.com ---設定被監控客戶端的名稱標識(agent主機名)
# service zabbix-agent restart
-----------------------------------------------------------------------------------------
查看zabbix server 已經定義好的key:(可用的監控項)
mysql> select key_,type from items;
(1) 建立監控項(item):
items有多種類型:
zabbix-agent:
工做模式:passive,active
網卡流量相關:
net.if.in[if,<mode>]
if:接口,如eth0
mode:bytes,packets,errors,dropped
net.if.out[if,<mode>]
net.if.total[if,<mode>]
端口相關:
net.tcp.listen[port]
net.tcp.port[<ip>,port]
net.tcp.service[service,<ip>,<port>]
net.udp.listen[port]
進程相關:
kernel.maxfiles 內核容許打開的最大文件數
kernel.maxproc 內核容許打開的最大進程數
cpu相關:
system.cpu.intr
system.cpu.load[<cpu>,<mode>] system.cpu.load[percpu,avg1],system.cpu.load[percpu,avg5],system.cpu.load[percpu,avg15]
system.cpu.num[<type>]
system.cpu.switches
system.cpu.util[<cpu>,<type>,<mode>
磁盤IO相關:
vfs.dev.read[<device><type><mode>]
vfs.dev.write[<device><type><mode>]
vfs.dev.inode[fs,<mode>]
示例:
cpu 中斷數:
Name cpu interrupts
Type zabbix agent
Key system.cpu.intr
...
歷史數據保留時長:採用生成的數據
歷史趨勢數據存儲週期:每小時的最大值,最小值,平均值。統計
儲存值:
As is 表示不作任何處理
delta(speed per second):每秒速率 (此次採集的數據值-上一次數據值)/時間
delta(simple change):改變的值 (此次採集的數據值-上一次數據值)
展現值:
(2) 建立圖形(graph):
(3) 建立觸發器(trigger):
一個trigger只能有一個item,一個item能夠有多個trigger
報警級別:
Not classified:未知級別,灰色
Information:通常信息
Warning:警告信息
Average:通常故障
High:高級別故障
Disater:致命故障
模擬DDOS攻擊:
# yum install hping3
# hping ping_IP faster
動做:
觸發條件通常爲事件:
trigger events:ok-->problem
Discovery events:zabbix的network discovery 工做時發現主機
Auto registration events:主動模式的agent註冊時產生的事件
Internal events:item變成再也不被支持時,或trigger變成未知狀態
operations:
send message
remote command
配置send message:
(4) 定義報警方式
1>定義報警媒介
name:
Type:Email,
SMTP sever:localhost(發郵件的服務器)
SMTP helo:localhost
SMTP email:(發件人)
2>建立用戶
-----------------------------------------------
自定義監控項:
server端----item.key值---agent端
server發送item.key給agent端,agent端接收key後再本地執行key生成的參數結果後返回給server端
在agent端經過定義某個命令或腳本獲取所需的數據,而且返回給server端
在agent端定義:
UserParameter
UserParameter=<key>,<command>
UserParameter=<key>,<command1>,<command2> --command中只能返回一個值
示例:
UserParameter=mysql.ping,mysqladmin -uroot ping |grep -c alive
執行成功返回值爲1,執行失敗返回值爲0
# vim /etc/zabbix/zabbix_agentd.conf
UserParameter=memory.free,/usr/bin/free | awk '/Mem:/{print $4}'
UserParameter=memory.usage[*],/bin/cat /proc/meminfo | awk '/$1:/{print $$2}'
在server端測試:
# yum install zabbix-get
zabbix_get [-hV] -s agent_ip -p agent_port [-I IP address] -k key值
-s --host: 指定被監控端主機名或者IP
-p --port:客戶端端口,默認10050
-I --source-address:指定源IP,寫上zabbix server的ip地址便可,通常留空,服務器若是有多ip的時候,你指定一個。
-k --key:你想獲取的key
# zabbix_get -s agent_ip -k "memory.free"
# zabbix_get -s 192.168.1.114 -k "memory.usage[MemTotal]"
# zabbix_get -s 192.168.1.114 -k "memory.usage[Buffers]"
# zabbix_get -s 192.168.1.114 -k "memory.usage[MemFree]"
建立監控項:
key值:memory.usage[MemTotal]
key值:memory.usage[Buffers]
key值:memory.usage[MemFree]
# zabbix_get -s 192.168.1.114 -k "net.if.out[eth0]"
---------------------------------------------------------------------------------
監控nginx
nginx status 開啓狀態頁面方法:
server {
...
location /status {
stub_status on;
access_log off;
allow 192.168.1.112; #容許訪問的IP
allow 127.0.0.1;
deny all;
}
}
狀態頁面各項數據的意義:
active connections ----當前nginx正在處理的活動鏈接數
serveraccepts handled requests ----總共處理了*個鏈接,成功建立*握手(證實中間沒有失敗的)
總共處理了*個請求(平均每次握手處理了*個請求)
reading ----nginx讀取到客戶端的Header信息數
writing ----nginx返回給客戶端的Header信息數
waiting ----開啓keep-alive的狀況下,這個值等於:active-(reading+writing),
表示nginx已經處理完正在等待下一次請求指令的駐留鏈接
# vim /etc/zabbix/zabbix_agentd.conf
UserParameter=Nginx.active[*],/usr/bin/curl -s "http://$1:$2/status" | awk '/^Active/ {print $NF}'
UserParameter=Nginx.reading[*],/usr/bin/curl -s "http://$1:$2/status" | grep 'Reading' | cut -d" " -f2
UserParameter=Nginx.writing[*],/usr/bin/curl -s "http://$1:$2/status" | grep 'Writing' | cut -d" " -f4
UserParameter=Nginx.waiting[*],/usr/bin/curl -s "http://$1:$2/status" | grep 'Waiting' | cut -d" " -f6
UserParameter=Nginx.accepted[*],/usr/bin/curl -s "http://$1:$2/status" | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$1}'
UserParameter=Nginx.handled[*],/usr/bin/curl -s "http://$1:$2/status" | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$2}'
UserParameter=Nginx.requests[*],/usr/bin/curl -s "http://$1:$2/status" | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$3}'
zabbix server端測試:
# zabbix_get -s 192.168.1.114 -k "Nginx.active[192.168.1.114.80]"
建立監控項:
key值:Nginx.accepted[192.168.1.114,80]
key值:Nginx.reading[192.168.1.114,80]
key值:Nginx.writing[192.168.1.114,80]
zabbix存放腳本的位置:(rpm -aq zabbix-server)
/usr/lib/zabbix/externalscripts
/etc/zabbix/externalscripts (zabbix-agent端)
UserParameter=nginx.access_countaccess,/usr/lib/zabbix/externalscripts/logcheck_nginx.accesslog totalaccess
UserParameter=nginx.access_countaccess,/usr/lib/zabbix/externalscripts/logcheck_nginx.accesslog 200access
UserParameter=nginx.access_countaccess,/usr/lib/zabbix/externalscripts/logcheck_nginx.accesslog 202access
UserParameter=nginx.access_countaccess,/usr/lib/zabbix/externalscripts/logcheck_nginx.accesslog 4xxaccess
UserParameter=nginx.access_countaccess,/usr/lib/zabbix/externalscripts/logcheck_nginx.accesslog 3xxaccess
UserParameter=nginx.access_countaccess,/usr/lib/zabbix/externalscripts/logcheck_nginx.accesslog 5xxaccess
基於SNMP監控:
被監控端:
# yum install net-snmp
# vim /etc/snmp/snmp.conf
....(相似於zabbix-agent的配置)
------------------------------------------------------------------------
自動發現規則(discovery)
discovery的前提:
agent
agentless
SNMP
包含兩個階段:discovery和action
網絡發現:
基於發現的信息:IP 範圍
服務:FTP,SSH,WEB,POP3,TCP...
zabbix agent
SNMP agent
(1)接口添加:
(2)配置發現action:
active -->discoverer:動做+條件+操做
配置agent 自動註冊:(auto-resistration)
一般用於此前故障的agent從新上線
也可基於active agent的自動註冊機制添加別動檢測,經過active agent註冊時提供的「ListenIP」和」ListenPOrt「進行
active -->自動註冊:動做+操做
-------------------------------------------------------------------------------
web監控
先定義web方案:包括一個或多個http請求或步驟(step);步驟的執行過程按照預先定義的順序進行執行
web監控能夠獲取到的信息:
整個web方案全部的步驟step的平均下載速度
失敗的step號
失敗的報錯信息
web方案的具體步驟(step)中,能夠按需使用 一下信息:
該step的下載速度
response時間
response狀態碼
建立web方案:
建立應用集application
建立web:1>方案
2>步驟step:Name(名稱):
URL :http://192.168.1.114/index.html
Timeout(超時時間):5
Requried string:(獲取到的[該頁面內的某個]字符串)
Requried status(狀態碼):200
方案建立完成後,zabbix會自動在連接的application中添加以下監控項:
item:Download speed for scenario(下載速度) item key:web.test.in[Scenario,,bps]
type:Numeric(float)
Failed step of scenario <Scenario> (錯誤步驟) item key:web.test.fail[Scenario]
type:Numeric(unsigned)
Last error message of scenario <Scenario>(錯誤信息) item key:web.test.error[Scenario]
使用時需將Scenario和step替換爲具體的名稱(Scenario爲web方案名稱)
查看監控的web:monitoring-->web
建立觸發器,報警
----------------------------------------------------------------------------------------
分佈式監控
proxy 和 node
zabbix 三種架構
server-agent
server-node-agent
server-proxy-agent
兩種方案:
使用代理(proxy):用於本區域數據收集,並將數據發送給server
使用節點(node):提供完整的zabbix server用以創建分佈式監控中的層級
proxy模型:(僅負責收集數據併發送給master,不監控)
只有一個proxy的daemon進行,proxy也有本身的數據庫(並且不能與master的數據庫相同),但其數據庫只會保留必定的時間,
與master server端通訊是將一批信息打包後發送到master端,mater將這些數據存放到本身的數據庫
特性:全部的配置變動修改只能在zabbix server端操做;
proxy 不會向server端同步configuration,只會接收;
proxy的數據庫定時將數據傳送給server,proxy本地數據只保存最近沒有發送的數據;
node模型:
自己至關於一臺zabbix server,有完整的web頁面,完整的數據庫,將數據源源不斷的發送給master server端
特性:解決host過多時單臺zabbix server面臨的性能瓶頸問題;
使用多個instance;每一個instance是獨立的一套zabbix,有本身的database和frotend;
支持熱插拔;
node定時給server端發送configuration,history,event;
server端定時給node發送configuration;
全部的配置變動只能在node節點操做,不能在server端操做;
支持樹狀結構;
二者的比較:
master-proxy相比於master-node的優勢:
proxy壓力小,數據庫只存儲必定的時間
master壓力變小,數據庫不是源源不斷獲取,減少IO壓力
架構更清晰,易維護
--------------------------------------------------------------------------------------
zabbix-proxy-agent模式
(1)zabbix-proxy端
<1>安裝軟件:
# yum install zabbix zabbix-proxy zabbix-proxy-mysql
# yum install mysql(建立數據庫,用戶並受權)
導入數據:只需導入schema.sql便可
<2>修改配置文件
# vim /etc/zabbix_proxy.conf
Server=192.168.1.112 ---server端的IP
Hostname=node3.cluster.com
DBHost=localhost
DBName=zabbix_proxy ---proxy本身的數據庫名
DBUser=zabbix_proxy
DBPassword=123
# service zabbix-proxy restart
# lsof -i:10051
(2)被監控端:
安裝相應的軟件
# yum install zabbix zabbix-agent zabbiz-sender
修改配置文件
# vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.1.115 ---Proxy服務器的IP
ServerActive=192.168.1.115 ---proxy服務器的IP
ListenPort=10050
Hostname=node5.cluster.com ---設定被監控客戶端的名稱標識(agent主機名)
# server zabbix_agent restart
(3)在zabbix server端監控:
添加監控主機
自動發現
手動添加
添加監控主機時:Monitored by proxy:(填寫proxy的IP)