nagios介绍
nagios是一款开源监控的应用,可用于监控本地和远程主机的日志、资源、死活等等诸多功能。通过snmp协议和nrpe协议。
nagios的配置文件是由nconf上进行配置,然后点击生成至服务器,上面有各种模板,可以自己配,也可以用现有的。
nagios的搭建过程,自行百度。
下面是一个nagios配置文件的样例
nagios配置文件目录结构:
# 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.cfg
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.cfg
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上进行可视化。
流程
1、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$
然后我们就会面临这几个问题:
1、复制源是怎么生成的?
2、复制源中的文件长什么样?
3、又是在哪里配置的?
上面这几个问题需要看如下的配置文件。
首先看 nagios 的主配置文件 nagios.cfg,从这个文件可以看出上面问题中的:3、复制源是哪里配置的。
# 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
看到这里,最基本的配置了解了,那么下面的问题就是1、复制源是怎么生成的?2、复制源中的文件长什么样?
复制源生成很简单,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上面生成图表,生成图表方式自行百度