nagios介紹node
nagios是一款開源監控的應用,可用於監控本地和遠程主機的日誌、資源、死活等等諸多功能。經過snmp協議和nrpe協議。python
nagios的配置文件是由nconf上進行配置,而後點擊生成至服務器,上面有各類模板,能夠本身配,也能夠用現有的。linux
nagios的搭建過程,自行百度。ios
下面是一個nagios配置文件的樣例git
nagios配置文件目錄結構:github
# ll /usr/local/nagios/etc/ total 152 -rw-rw-r-- 1 nagios nagios 12999 Apr 29 08:08 cgi.cfg drwxr-xr-x 2 apache apache 4096 May 31 08:45 Default_collector <- 定義監視項的目錄 drwxr-xr-x 2 apache apache 4096 May 31 08:38 global <- 全局參數的定義,checkcommand的定義 -rw-r--r-- 1 nagios nagios 50 Apr 29 08:12 htpasswd.users -rw-rw-r-- 1 nagios nagios 46169 May 3 01:37 nagios.cfg <- nagios的配置文件 -rw-rw-r-- 1 root root 44816 Apr 29 08:58 nagios.cfg.29-04-18 -rw-r--r-- 1 root root 2358 May 2 10:48 NagiosConfig.tgz drwxr-xr-x 2 nagios nagios 4096 May 8 11:59 nrpe -rw-r--r-- 1 nagios nagios 7217 Apr 29 08:45 nrpe.cfg <- nrpe的通訊配置 -rwxr-xr-x 1 nagios nagios 7217 Apr 29 08:38 nrpe.cfg.save drwxrwxr-x 2 nagios nagios 4096 Apr 30 02:19 objects -rw-rw---- 1 nagios nagios 1312 Apr 29 08:08 resource.cfg
vim /usr/local/nagios/etc/Default_collect/services.cfg數據庫
define service { service_description check_proc_nagios <- 頁面上顯示出的監控項的名字,在這裏定義 check_command check_remote_procs!nagios!8!1:8 <- 執行的check command,這個配置是監控的主要命令,幾乎靠着個命令才能監控到是否OK,靠着「!」做爲參數分隔符 host_name host名 <- 寫出監控哪一臺服務器,前提是和nagios server是能夠通訊的 check_period 24x7 <- 監控的時間 contact_groups +admins <- 聯繫組,聯繫人,出錯發給誰 event_handler_enabled 0 use generic-service <- 採用的哪一個現有模板(nconf上配置) }
vim /usr/local/nagios/etc/Default_collect/hosts.cfgapache
define host { host_name ********** <- 定義的host名主要顯示在監控頁面上
alias ***サーバ <- 定義的別名 address ***-b-**-***-**.stage-***-org.fastretailing.cn <- 這一行定義的是主要去通訊的IP地址 _graphiteprefix graphite_host icon_image_alt Linux icon_image base/linux40.gif statusmap_image base/linux40.gd2 check_command check-host-alive check_period 24x7 notification_period 24x7 contact_groups +admins use generic-host,linux-server }
vim /usr/local/nagios/etc/global/checkcommands.cfgvim
define command { command_name check_local_disk command_line $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$ <- 在services.cfg中,check_command參數中,用「!」分割的就是「$ARG$」的參數之間間隔 }
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
define command {
command_name check_remote_procs
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_procs -a "-C $ARG1$ -w $ARG2$ -c $ARG3$" <- 這一行監視的配置內容是監視遠程的進程
}
以上,配置好監控項。服務器
influxdb介紹
influxdb,中文名時序數據庫,
時序數據是基於時間的一系列的數據。在有時間的座標中將這些數據點連成線,往過去看能夠作成多緯度報表,揭示其趨勢性、規律性常性;往將來看能夠作大數據分析,機器學習,實現預測和預警。
時序數據庫就是存放時序數據的數據庫,而且須要支持時序數據的快速寫入、持久化、多緯度的聚合查詢等基本功能。
對比傳統數據庫僅僅記錄了數據的當前值,時序數據庫則記錄了全部的歷史數據。同時時序數據的查詢也老是會帶上時間做爲過濾條件。
influxdb主要配置
vim /etc/influxdb/influxdb.conf
[meta] # Where the metadata/raft database is stored <- 元數據存放位置 dir = "/var/lib/influxdb/meta" [data] # The directory where the TSM storage engine stores TSM files. <- 最終數據 dir = "/var/lib/influxdb/data" # The directory where the TSM storage engine stores WAL files. <- wal數據爲預寫數據 wal-dir = "/var/lib/influxdb/wal"
nagios將數據存入influxdb的過程
nagios將監視出的數據,經過graphios,來存放到influxdb,爲了方便往後再grafana上進行可視化。
流程
一、nagios的執行命令的輸出結果,寫到一個文件,而後對這個文件進行mv,存放在一個目錄下。
具體配置以下
# vim /usr/local/nagios/etc/global/misccommands.cfg define command { command_name graphios_perf_host command_line /bin/mv /usr/local/nagios/var/host-perfdata /var/spool/nagios/graphios/host-perfdata.$TIMET$ <- mv 命令的主要執行 } define command { command_name graphios_perf_service command_line /bin/mv /usr/local/nagios/var/service-perfdata /var/spool/nagios/graphios/service-perfdata.$TIMET$ <- mv 命令的主要執行 }
上面配置文件中,要求的是mv /usr/local/nagios/var/host-perfdata /var/spool/nagios/graphios/host-perfdata.$TIMET$
而後咱們就會面臨這幾個問題:
一、複製源是怎麼生成的?
二、複製源中的文件長什麼樣?
三、又是在哪裏配置的?
上面這幾個問題須要看以下的配置文件。
首先看 nagios 的主配置文件 nagios.cfg,從這個文件能夠看出上面問題中的:三、複製源是哪裏配置的。
# vim /usr/local/nagios/etc/nagios.cfg process_performance_data=1 service_perfdata_file=/usr/local/nagios/var/service-perfdata <- 這行指定的是複製源的文件,就是nagios監視的命令執行結果輸出到哪一個文件,在這裏指定。 service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tSERVICESTATE::$SERVICESTATE$\tSERVICESTATETYPE::$SERVICESTATETYPE$\tGRAPHITEPREFIX::$_SERVICEGRAPHITEPREFIX$\tGRAPHITEPOSTFIX::$_SERVICEGRAPHITEPOSTFIX$\tMETRICTYPE::$_SERVICEMETRICTYPE$ 上面這行配置,配置的是把輸出結果的文件格式化,爲了方便後面的graphios來存放到influxdb中作準備
service_perfdata_file_mode=a service_perfdata_file_processing_interval=15 service_perfdata_file_processing_command=graphios_perf_service host_perfdata_file=/usr/local/nagios/var/host-perfdata host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tGRAPHITEPREFIX::$_HOSTGRAPHITEPREFIX$\tGRAPHITEPOSTFIX::$_HOSTGRAPHITEPOSTFIX$\tMETRICTYPE::$_HOSTMETRICTYPE$ host_perfdata_file_mode=a host_perfdata_file_processing_interval=15 host_perfdata_file_processing_command=graphios_perf_host
看到這裏,最基本的配置瞭解了,那麼下面的問題就是一、複製源是怎麼生成的?二、複製源中的文件長什麼樣?
複製源生成很簡單,nagios監視頁面上的數據,實際上是基於nagios自身執行的命令,而後返回到頁面,再供給咱們進行觀看是不是OK或者DOWN
# /usr/local/nagios/libexec/check_nrpe -H 10.**.58.*** -c check_disk -a "-w 20% -c 10%" DISK OK - free space: /dev 1873 MB (99.99% inode=100%); /dev/shm 1882 MB (100.00% inode=100%); / 499479 MB (99.15% inode=100%);| /dev=0MB;1498;1685;0;1873 /dev/shm=0MB;1505;1693;0;1882 /=4259MB;403068;453452;0;503836
以上是輸出結果,這個輸出結果會輸入到/usr/local/nagios/var/service-perfdata裏面,這個配置在上面的nagios.cfg中配置好了的。
但仔細看,會發現上面的nagios.cfg中還有一個設置項:service_perfdata_file_template,就是很長很長的那一段,這一個設置項的內容是格式化上面的那條輸出結果。
下面看個格式化完成了的例子。
# vim /var/spool/nagios/graphios/service-perfdata.1528256154 DATATYPE::SERVICEPERFDATA TIMET::1528256140 HOSTNAME::************ SERVICEDESC::LOAD SERVICEPERFDATA::load1=0.000;2.000;4.000;0; load5=0.000;2.000;4.000;0; load15=0.000;2.000;4.000;0; SERVICECHECKCOMMAND::check_remote_load! HOSTSTATE::UP HOSTSTATETYPE::HARD SERVICESTATE::OK SERVICESTATETYPE::HARD GRAPHITEPREFIX::grafana GRAPHITEPOSTFIX::load METRICTYPE::$_SERVICEMETRICTYPE$ DATATYPE::SERVICEPERFDATA TIMET::1528256145 HOSTNAME::************ SERVICEDESC::Swap-Usage SERVICEPERFDATA::swap=2047MB;1433;1023;0;2047 SERVICECHECKCOMMAND::check_remote_swap! HOSTSTATE::UP HOSTSTATETYPE::HARD SERVICESTATE::OK SERVICESTATETYPE::HARD GRAPHITEPREFIX::logaggregator GRAPHITEPOSTFIX::swap METRICTYPE::$_SERVICEMETRICTYPE$ DATATYPE::SERVICEPERFDATA TIMET::1528256146 HOSTNAME::************ SERVICEDESC::Swap-Usage SERVICEPERFDATA::swap=2047MB;1433;1023;0;2047 SERVICECHECKCOMMAND::check_remote_swap! HOSTSTATE::UP HOSTSTATETYPE::HARD SERVICESTATE::OK SERVICESTATETYPE::HARD GRAPHITEPREFIX::jenkins GRAPHITEPOSTFIX::swap METRICTYPE::$_SERVICEMETRICTYPE$
看到上面這個配置文件,就會有個疑問:爲何要把文件改爲這種格式?
緣由其實就是,nagios的數據想要傳送到influxdb上,須要graphios來充當一個搬運工的角色,graphios的代碼是python編寫的,其中有一段代碼設計好了要取這樣格式的數據。
graphios的代碼能夠在https://github.com/shawn-sterling/graphios/blob/master/graphios.py 查看
以後的事情就很簡單了,在graphios配置中,開啓以下配置
vim /etc/graphios/graphios.cfg
enable_influxdb09 = True # Extra tags to add to metrics, like data center location etc. # Only valid for 0.9 #influxdb_extra_tags = {"location": "la"} # Comma separated list of server:ports # defaults to 127.0.0.1:8086 (:8087 if using SSL). influxdb_servers = 127.0.0.1:9096 # SSL, defaults to False #influxdb_use_ssl = True # Database-name, defaults to nagios influxdb_db = nagios # Credentials (required) influxdb_user = influxdb influxdb_password = influxdb
以上配置,配置成功後,
# /etc/init.d/graphios start
# /etc/init.d/nagios start
以上配置,做爲一個筆記,大體流程 nagios -> graphios -> influxdb
最後在grafana上面生成圖表,生成圖表方式自行百度