480 likes | 1.03k Views
Nagios 在企业中的应用. 李平. QQ: 36625090 msn: lxy9805287@163.com. 内容大纲. Nagios 介绍 Nagios 安装 Nagios 初级应用 Nagios 进阶应用 常见问题. Nagios 介绍. 常见的监控程序 :. mrtg Cacti Nagios Smokeping zabbix ……. 使用 nagios 的准备知识. 熟悉 snmp 熟悉 rrdtool 掌握 shell 编程 熟悉 mysql 数据库
E N D
Nagios在企业中的应用 李平 QQ: 36625090 msn: lxy9805287@163.com
内容大纲 • Nagios介绍 • Nagios安装 • Nagios初级应用 • Nagios进阶应用 • 常见问题
Nagios 介绍 常见的监控程序: • mrtg • Cacti • Nagios • Smokeping • zabbix • ……
使用nagios的准备知识 • 熟悉snmp • 熟悉rrdtool • 掌握shell编程 • 熟悉mysql数据库 • 熟悉apache配置
What is nagios ? • Nagios是一个全能的监控程序 • 他运行于*nix系统上 • 可以监控网络流量,系统,服务 • 通过状态作出相应的事件操作 • 可扩展其它插件,模块
Nagios主要功能介绍 • 流量监控,系统负载,用户,磁盘,服务,所有运行在主机的服务 • Email告警,手机短信告警(需短信网关), 声音告警 • 严格的权限审查 • 报表 • ……
Nagios 介绍 • 运行环境 -------------------------------------------------- • *nix 操作系统 • http 提供基本的web访问 • Perl 部分模块 • net-snmp 提供snmpwalk,snmpget命令等 • Mysql 存储监控内容的参数 • Rrdtool 画图 • Apan-sql 操作mysql,rrd数据库,调用rrdtool绘制图形(shell)
Nagios系统 ssh ssh nagios snmpget Apan-sql snmp Check_nrpe Nagios-plgins nrpe 远程主机 Web apache Nagios 工作体系 NSCA http ftp mail plgins SSL Nagios处理系统
分布式nagios NSCA Passive Checks
Nagios 状态机制 • 主机状态 • ------------------------------------------------------------------------------------------------------ • Down 宕机,(网络不通) • Unreachable 未知 • Up 正常 • Pending 正在探测 • 服务状态 • ------------------------------------------------------------------------------------------------------ • Critical 达到不可用的阈值(危险) 2 • Warning 告警 1 • Unknown 未知 3 • Ok 正常 0 • Pending 正在探测
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/
Nagios 安装 • Nagios-plugins安装 --------------------------------------------- Tar zxvf nagios-plugins.xx.tar.gz (version 1.4) ./configure make make install (/usr/local/nagios/libexec/)
Nagios 安装 • Nagios 目录结构 /usr/local/nagios etc bin sbin libexec share var • Etc 配置文件 • Bin nagios程序 • Sbin cgi执行程序 • Libexec 插件(模块) • Share html文档 • Var 日志数据
Nagios 配置 • nagios 主配置文件 (nagios.cfg) • ------------------------------------------------------------------------------------------------ • 包含其它配置文件 cfg_file=/usr/local/nagios/etc/global.cfg • 其它配置参数均默认,也可自己根据需求更改, • Cgi 运行参数配置文件 (cgi.cfg) • --------------------------------------------------------------------------------------------- • 打开用户验证 use_authentication=1 • 打开状改声音,位于该文件最底端 • 例如主机宕机发出的声音 • #host_down_sound=hostdown.wav • 否则会没有状态声音哦 ~_~ • 其它按默认参数
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>
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 • }
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)的几项监控. • 那么接下来的问题是如何增加被控主机到系统.
无图形 Critical状态 OK状态 有图形
增加一个主机到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 • }
增加一个服务到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
Nagios进阶应用 • nagios • Nrpe • Apan-sql
Nagios 对象定义 • Host definitions • Host group definitions • Service definitions • Service group definitions • Contact definitions • Contact group definitions
Nagios 对象模型定义 • define 对象名称{ 宏 参数 … ….. • }
命令定义: 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命令分析
Nrpe是一个nagios远程主机插件执行程序 nagios的一个数据采集工具 通过 tcp 5666 端口发送数据 Nrpe 是什么? 工作机制: Nagios守护进程驱动 check_nrpe • Check_nrpe 连接远程主机的nrpe服务.并且发出命令 • 远程主机nrpe 守护进程执行命令.并且把结果送回给check_nrpe
Nrpe Nrpe有2个程序1个配置文件: check_nrpe 客户端 (工作于nagios主机) Nrpe 服务端 (工作于远程主机) Nrpe.cfg 服务端配置 (远程主机)
Nrpe 安装 • 下载安装会生成以下3个文件…. • 服务端 libexec/check_nrpe • 客户端: nrpe • 配置文件: nrpe.cfg 配置文件仅在远程主机使用. • 服务端使用方法: Check_nrpe –H 远程ip –c command -p port
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
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 }
Apan-sql 是一套 shell 程序 通过snmpget, check_nrpe等方法取回数据 调用rrdtool将数据存入rrd数据库. Web用户请求查看图形,调用rrdtool绘制图形,显示给用户 Apan-sql 是什么
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
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
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
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 }
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 }
通过 apanconf-sql shell程序增加服务 : 按照弹出的对话框写入相应的参数,增加或者删除完一定要执行第四步,更新cgi执行所需的url扩展参数文件 重启nagios APAN-sql使用
图形的诞生! 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 }
Nagios常见问题 • Services Unknown (有图形项目) • 不显示图形 (有图形项目) • 状态无改变 (有图形) • Command not find (有图形或无图形) • 无事件通知 (有图形或无图形) • 等
可能的原因 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 检查)
可能的原因 无事件通知: • 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$ }
故障排除3步曲 • 校验nagios配置文件 • 查看分析nagios的日志 • 调试apan所执行的shell • 将shell的关键结果输出到标准输出 • 将shell的关键结果输出到文件 • 手动执行 apan-sql.sh文件进行调试
资源 Nagios相关资源 ----------------------------------------------------------------------------- • Nagios 官方网站 : http://www.nagios.org • Nagios 插件网站: http://www.nagiosexchange.org • Apan http://apan.sourceforge.net • Rrdtool http://oss.oetiker.ch/rrdtool/
THANKS Any question?