1 / 46

Nagios 在企业中的应用

Nagios 在企业中的应用. 李平. QQ: 36625090 msn: lxy9805287@163.com. 内容大纲. Nagios 介绍 Nagios 安装 Nagios 初级应用 Nagios 进阶应用 常见问题. Nagios 介绍. 常见的监控程序 :. mrtg Cacti Nagios Smokeping zabbix ……. 使用 nagios 的准备知识. 熟悉 snmp 熟悉 rrdtool 掌握 shell 编程 熟悉 mysql 数据库

gaenor
Download Presentation

Nagios 在企业中的应用

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Nagios在企业中的应用 李平 QQ: 36625090 msn: lxy9805287@163.com

  2. 内容大纲 • Nagios介绍 • Nagios安装 • Nagios初级应用 • Nagios进阶应用 • 常见问题

  3. Nagios 介绍 常见的监控程序: • mrtg • Cacti • Nagios • Smokeping • zabbix • ……

  4. 使用nagios的准备知识 • 熟悉snmp • 熟悉rrdtool • 掌握shell编程 • 熟悉mysql数据库 • 熟悉apache配置

  5. What is nagios ? • Nagios是一个全能的监控程序 • 他运行于*nix系统上 • 可以监控网络流量,系统,服务 • 通过状态作出相应的事件操作 • 可扩展其它插件,模块

  6. Nagios主要功能介绍 • 流量监控,系统负载,用户,磁盘,服务,所有运行在主机的服务 • Email告警,手机短信告警(需短信网关), 声音告警 • 严格的权限审查 • 报表 • ……

  7. Nagios 介绍 • 运行环境 -------------------------------------------------- • *nix 操作系统 • http 提供基本的web访问 • Perl 部分模块 • net-snmp 提供snmpwalk,snmpget命令等 • Mysql 存储监控内容的参数 • Rrdtool 画图 • Apan-sql 操作mysql,rrd数据库,调用rrdtool绘制图形(shell)

  8. Nagios系统 ssh ssh nagios snmpget Apan-sql snmp Check_nrpe Nagios-plgins nrpe 远程主机 Web apache Nagios 工作体系 NSCA http ftp mail plgins SSL Nagios处理系统

  9. 分布式nagios NSCA Passive Checks

  10. Nagios 状态机制 • 主机状态 • ------------------------------------------------------------------------------------------------------ • Down 宕机,(网络不通) • Unreachable 未知 • Up 正常 • Pending 正在探测 • 服务状态 • ------------------------------------------------------------------------------------------------------ • Critical 达到不可用的阈值(危险) 2 • Warning 告警 1 • Unknown 未知 3 • Ok 正常 0 • Pending 正在探测

  11. Nagios 安装 下载代码: http://www.nagios.org groupadd nagios useradd -g nagios nagios tar zxvf nagios-xx.tar.gz (version 3.0) ./configure make all make full-install Make install-config 安装后位置 : /usr/local/nagios/

  12. Nagios 安装 • Nagios-plugins安装 --------------------------------------------- Tar zxvf nagios-plugins.xx.tar.gz (version 1.4) ./configure make make install (/usr/local/nagios/libexec/)

  13. Nagios 安装 • Nagios 目录结构 /usr/local/nagios etc bin sbin libexec share var • Etc 配置文件 • Bin nagios程序 • Sbin cgi执行程序 • Libexec 插件(模块) • Share html文档 • Var 日志数据

  14. Nagios 配置 • nagios 主配置文件 (nagios.cfg) • ------------------------------------------------------------------------------------------------ • 包含其它配置文件 cfg_file=/usr/local/nagios/etc/global.cfg • 其它配置参数均默认,也可自己根据需求更改, • Cgi 运行参数配置文件 (cgi.cfg) • --------------------------------------------------------------------------------------------- • 打开用户验证 use_authentication=1 • 打开状改声音,位于该文件最底端 • 例如主机宕机发出的声音 • #host_down_sound=hostdown.wav • 否则会没有状态声音哦 ~_~ • 其它按默认参数

  15. Nagios 配置 • 设置web界面访问接口 • ------------------------------------------------------------------------------------------------------ • 增加如下配置到apache 配置文件 • ScriptAlias /nagios/cgi-bin /usr/local/nagios/sbin • <Directory "/usr/local/nagios/sbin"> • Options ExecCGI AllowOverride None • Order allow,deny Allow from all • AuthName "Nagios Access" • AuthType Basic • AuthUserFile /usr/local/nagios/etc/htpasswd.users • Require valid-user • </Directory> • Alias /nagios/ /usr/local/nagios/share (请注意红色部分后面是否有 / ,与web界面访问要相符) • <Directory "/usr/local/nagios/share"> • Options None AllowOverride None • Order allow,deny Allow from all • AuthName "Nagios Access" • AuthType Basic • AuthUserFile /usr/local/nagios/etc/htpasswd.users • Require valid-user • </Directory>

  16. Nagios 配置 • 增加验证用户 • ------------------------------------------------------------------------------------------------------ • Htpasswd –c /usr/local/nagios/etc/htpasswd.users username • 将apache验证用户增加到nagios用户,否则打开nagios页面将会提示无权限查看nagios的内容 • Su - nagios • Vi localhost.cfg • define contact{ • contact_name username • alias alias username • service_notification_period workhours • host_notification_period workhours • service_notification_options c,r • host_notification_options d,r • service_notification_commands notify-by-email, notify-by-sms • host_notification_commands host-notify-by-email • email username@domain.com • paper 13800000000 • }

  17. Nagios 配置 • 增加nagios验证用户到组 • ------------------------------------------------------------------------------------------------------ • define contactgroup{ • contactgroup_name admins • alias Nagios Administrators • members nagios-admin,username • } • 组员名字以 “,”(逗号) 隔开 • 校验配置文件 /usr/local/nagios/bin/nagios –v nagios.cfg • 切换到root用户 /etc/init.d/nagios start • 以上配置完成后即可打开web界面输入, http://localhost/nagios/输入刚才建立的用户 密码即可登入nagios监控系统, • 登录可发现已经有了本机(localhost)的几项监控. • 那么接下来的问题是如何增加被控主机到系统.

  18. 无图形 Critical状态 OK状态 有图形

  19. 增加一个主机到nagios系统 • vi /etc/hosts • 增加主机名称 例如 10.0.0.2 remote_host • su - nagios • Cd /usr/local/nagios && vi localhost.cfg • 增加主机定义 • define host{ • use linux-server • host_name remote_host • alias It’s http server • address 10.0.0.2 • }

  20. 增加一个服务到nagios系统 • 增加服务,例如http的tcp端口服务 • define service{ • use local-service ;服务模型 • host_name remote_host ;主机名称 • service_description HTTP_PORT ;服务名称 • check_command check_tcp!80!0.1!0.3 ;命令行参数 • } • 校验配置文件: /usr/local/nagios/bin/nagios –v nagios.cfg • 正常: Total Warnings: 0    Total Errors:  0 • 切换到 root 用户,重新读取nagios配置 • /etc/init.d/nagios reload

  21. Nagios进阶应用 • nagios • Nrpe • Apan-sql

  22. Nagios 对象定义 • Host definitions • Host group definitions • Service definitions • Service group definitions • Contact definitions • Contact group definitions

  23. Nagios 对象模型定义 • define 对象名称{ 宏 参数 … ….. • }

  24. 命令定义: define command{ command_name check_tcp ;服务中调用的检测命令 command_line $USER1$/check_tcp -H $HOSTADDRESS$ -p $ARG1$ -w $ARG2$ -c $ARG3$ } 服务定义 define service{ use local-service host_name remote_host service_description HTTP_PORT check_command check_tcp!80!0.1!0.3 } $user1$ 宏定义 $USER1$=/usr/local/nagios/libexec $ARG1$类似于shell的位置参数: 范围 ($ARG1$..........$ARG32$), 2个$ : -p -w -c Port : $ARG1$ ==80 warning: $ARG2$ ==0.1 critical: $ARG3$==0. Nagios命令分析

  25. Nrpe是一个nagios远程主机插件执行程序 nagios的一个数据采集工具 通过 tcp 5666 端口发送数据 Nrpe 是什么? 工作机制: Nagios守护进程驱动 check_nrpe • Check_nrpe 连接远程主机的nrpe服务.并且发出命令 • 远程主机nrpe 守护进程执行命令.并且把结果送回给check_nrpe

  26. Nrpe Nrpe有2个程序1个配置文件: check_nrpe 客户端 (工作于nagios主机) Nrpe 服务端 (工作于远程主机) Nrpe.cfg 服务端配置 (远程主机)

  27. Nrpe 安装 • 下载安装会生成以下3个文件…. • 服务端 libexec/check_nrpe • 客户端: nrpe • 配置文件: nrpe.cfg 配置文件仅在远程主机使用. • 服务端使用方法: Check_nrpe –H 远程ip –c command -p port

  28. Nrpe 安装 在远程主机建立 nagios用户 (下列操作将会以nagios用户执行) 将libexec拷贝到 (/usr/local/nagios) 将nrpe.cfg拷贝至 /usr/local/nagios/etc, Nrpe.cfg 修改: allowed_hosts= nagios主机的ip地址 (允许访问的地址) Nrpe.cfg 命令定义: command[check_hda1] /usr/local/nagios/check_disk -w 20% -c 10% -p dev/hda1 启动nrpe守护进程: /usr/local/nagios/libexec/nrpe –c /usr/local/nagios/etc/nrpe.cfg –d

  29. Check_nrpe 采集数据 定义 nagios 命令: define command{ command_name check_nrpe command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ } 定义nrpe的执行命令(被监控机): command[check_hda1] / usr/loal/nagios/check_disk -w 20% -c 10% -p /dev/hda1 定义nagios服务: define service{ use local-service host_name remote_host service_description hda1 check_command check_nrpe! check_hda1 }

  30. Apan-sql 是一套 shell 程序 通过snmpget, check_nrpe等方法取回数据 调用rrdtool将数据存入rrd数据库. Web用户请求查看图形,调用rrdtool绘制图形,显示给用户 Apan-sql 是什么

  31. APAN-sql安装 下载: http://apan.sourceforge.net tar –zxvf apan-sql-xx.tar.gz cp –r apan-sql /usr/local/nagios cp apan-sql.cgi generate-sql.cgi /usr/local/nagios/sbin cp graph.png /usr/local/nagios/share/images/logos 更改 apan.defs apanconf.defs 配置相应的参数. 更改sql.conf 配置mysql数据库连接参数.使用createdb.sh建立数据库 mkdir /usr/local/nagios/rra (建立rrd文件存放目录) 增加 xedtemplate_config_file=/usr/local/nagios/etc/servicextinfo-apan到 cgi.cfg

  32. Apan-sql.sh Apan-sql的命令执行格式 ./apan-sql.sh 函数名主机名服务名称unix时间warning阈值Critical阈值 PLUGSDIR =/usr/local/nagios/apan-sql/plugs-sql #定义路径 for file in ${PLUGSDIR}/*.sh; do #载入函数 . $file # done # PLUGIN=$1 #传递参数 HOST=$2 SVCNAME=$3 TIME=$4 WARN=$5 CRIT=$6 XARGS=$7

  33. Apan-sql.sh 部分内容 case $PLUGIN in disk_by_snmp) disk_by_snmp ;; apan_ping) apan_ping ;; http) http ;; tcp) tcp ;; *) debug "Unknown plugin: '$PLUGIN on host '$HOST'" echo "Unknown Apan-plugin: $PLUGIN" exit 3 ;; esac $RRDTOOL update $RRDFILE -t $TEMPL $DATA ;写入数据到rrd文件 exit $RETVAL ; 返回一个状态给nagios

  34. Snmpget 函数 snmpget() { RETSTR="SNMP OK: " for ARGID in $ARGIDS; do ARG=`echo "select servicearg from apanserviceargs where idx=$ARGID;"|$SQLCOMM` DSNAME=`echo "select dsname from apanserviceargs where idx=$ARGID;"|$SQLCOMM` N=`expr $N + 1` COMM=`echo $ARG|cut -d ":" -f 1` OID=`echo $ARG|cut -d ":" -f 2` VALUE=`$PLUGINSDIR/check_snmp -H $HOST -C $COMM -o $OID` (取数据的方法也可以是check_nrpe) STATUS=$? COUNTER=`echo $VALUE|awk '{print $NF}'` if [ $STATUS -gt 0 ]; then RETVAL=2 RETSTR=`echo "$VALUE"|head -1` ERR=1 exit $RETVAL fi TEMPL="$TEMPL:$DSNAME" DATA="$DATA:$COUNTER" RETVAL=0 RETSTR="${RETSTR}${DSNAME}:${COUNTER}, " ERR=0 done _DATA_WARN=`echo "$DATA_OUT / 1024000000"|bc -l` WARN_RESLUT=`echo "$_DATA_WARN >= $WARN && $_DATA_WARN < $CRIT"|bc -l` CRIT_RESLUT=`echo "$_DATA_WARN >= $CRIT && $_DATA_WARN > $WARN"|bc -l` if [ $WARN_RESLUT -eq 1 ];then #判断生成服务状态 RETVAL=1 elif [ $CRIT_RESLUT -eq 1 ];then RETVAL=2 else RETVAL=0 fi }

  35. APAN-sql使用 增加nagios命令 define command { command_name apan-sql command_line /usr/local/nagios/apan-sql/apan-sql.sh $ARG1$ $HOSTNAME$ "$SERVICEDESC$" $TIMET$ $ARG2$ $ARG3$ } 增加服务到nagios define service{ use local-service ; Name of service template to use host_name CEGW service_description WAN check_command apan-sql!snmpget!10!20 }

  36. 通过 apanconf-sql shell程序增加服务 : 按照弹出的对话框写入相应的参数,增加或者删除完一定要执行第四步,更新cgi执行所需的url扩展参数文件 重启nagios APAN-sql使用

  37. 图形

  38. 图形的诞生! Cgi.cfg:: xedtemplate_config_file=/usr/local/nagios/etc/servicextinfo-apan apanconf-sql 创建 servicextinfo-apan:; define serviceextinfo { host_name CEGW service_description LAN notes_url /nagios/cgi-bin/apan-sqll.cgi?host=CEGW&service=LAN icon_image graph.png icon_image_alt View Apan-graphs }

  39. Nagios常见问题 • Services Unknown (有图形项目) • 不显示图形 (有图形项目) • 状态无改变 (有图形) • Command not find (有图形或无图形) • 无事件通知 (有图形或无图形) • 等

  40. 可能的原因 Services Unknown : • Nagios的服务与apanconf-sql 程序添加时候输入的服务描述不一致 不显示图形 : • apan所需的参数设置不正确,检查apan.defs文件的定义 • 没有增加cgi.cfg 的 xedtemplate_config_file 定义 • 没有将所需的 cgi文件和icon文件复制到相应的位置 • 检查rrd文件是否存在或者可写(一般是由root用户执行了操作) 状态无改变: • 在apan 的shell 里设置的返回状态不正确 • 告警阈值设置不正确 • 告警阈值参数传递错误 Command not find: • define command 对象模型定义错误,(使用 nagios –v nagios.cfg 检查)

  41. 可能的原因 无事件通知: • define contact 没定义事件通报的方式 • 请检查 是否有下2行 service_notification_commands notify-by-email host_notification_commands host-notify-by-email • 请检查 是否定义过 类似与 notify-by-email的命令 define command{ command_name notify-by-email command_line /usr/bin/printf "%b" "***** Nagios 2.9 *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /bin/mail -s "** $NOTIFICATIONTYPE$ alert - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$ }

  42. 故障排除3步曲 • 校验nagios配置文件 • 查看分析nagios的日志 • 调试apan所执行的shell • 将shell的关键结果输出到标准输出 • 将shell的关键结果输出到文件 • 手动执行 apan-sql.sh文件进行调试

  43. 资源 Nagios相关资源 ----------------------------------------------------------------------------- • Nagios 官方网站 : http://www.nagios.org • Nagios 插件网站: http://www.nagiosexchange.org • Apan http://apan.sourceforge.net • Rrdtool http://oss.oetiker.ch/rrdtool/

  44. THANKS Any question?

More Related