一个梦想环游世界的DevOps
——快来看看呀

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上面生成图表,生成图表方式自行百度

 

posted on 2018-06-06 12:32  朝澈  阅读(1814)  评论(0编辑  收藏  举报