免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 16016 | 回复: 23
打印 上一主题 下一主题

[其他] 自动化运维之--如何实现nagios插件的编写? [复制链接]

论坛徽章:
17
2015年辞旧岁徽章
日期:2015-03-03 16:54:152017金鸡报晓
日期:2017-02-08 10:39:422017金鸡报晓
日期:2017-01-10 15:19:56JAVA
日期:2016-11-01 13:25:46C
日期:2016-10-25 16:01:4715-16赛季CBA联赛之八一
日期:2016-06-21 23:38:0815-16赛季CBA联赛之山东
日期:2016-05-12 12:49:54IT运维版块每日发帖之星
日期:2016-04-20 06:20:00IT运维版块每日发帖之星
日期:2016-03-22 06:20:00黄金圣斗士
日期:2015-11-24 10:43:13IT运维版块每日发帖之星
日期:2015-08-25 06:20:002015亚冠之德黑兰石油
日期:2015-08-22 22:55:54
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-06-09 11:18 |只看该作者 |倒序浏览
话题背景:

      众所周知,nagios是一个功能非常强大的开源的系统网络监测程序,通过访问http://www.nagios.org可以了解其基本特性。nagios不但能够实现对系统CPU,磁盘、网络等方面参数的基本系统监测,而且还能够监测包括HTTP等各种基本的服务类型。

      但nagios也存在不足,例如对网络设备的监控,就不如cacti强大;nagios插件非常多,但不可能100%满足所有业务监控,可以通过自己来编写插件,来实现自带插件不能监控的问题。nagios已成为大多数公司采用的监控工具,可以满足公司的大部分要求,但在实际使用过程中还会遇到一些问题;还有一些nagios自带插件不能实现的功能,这些实际情况成为nagios使用的一些问题。


本期话题:

1.nagios在使用中遇到哪些问题?
2.nagios插件是否编写过?可以举例说明。
3.如何扩展Nagios,以实现自定义监控?
4.如何借助Nagios监测常用服务?


活动时间:2015年6月9日—2015年7月9日


奖励设置:

一等奖:将选取1名讨论精彩的童鞋,赠送一本《Zabbix监控系统》作为奖励。



媒体评论:
   本书从最基础的Zabbix系统安装部署讲起,直至Zabbix系统的优化,包括了日常管理和维护Zabbix系统的各个方面,是一本不可多得的介绍Zabbix监控系统的专业书籍。在体系安排上,本书遵循由易到难、循序渐进的原则;在行文上,叙述语言通俗易懂、结构清晰,特别是本书提供了较多的实例,这些实例可以为读者实际工作提供较高的借鉴价值。

二等奖:将选取2名讨论活跃的童鞋,活每人赠送技术图书一本作为奖励:ChinaUnix技术图书文库

三等奖:我们将抽取3名参与讨论的童鞋,赠送一枚“荣誉会员”徽章

       

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
2 [报告]
发表于 2015-06-12 08:54 |只看该作者
讨论Nagios却以Zabbix为奖励,醉了~

论坛徽章:
18
2015亚冠之阿尔希拉尔
日期:2015-06-02 09:56:10数据库技术版块每日发帖之星
日期:2016-08-13 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-03-19 06:20:00数据库技术版块每日发帖之星
日期:2015-12-25 06:20:35数据库技术版块每日发帖之星
日期:2015-12-25 06:20:35数据库技术版块每日发帖之星
日期:2015-12-25 06:20:35数据库技术版块每日发帖之星
日期:2015-09-12 06:20:00数据库技术版块每日发帖之星
日期:2015-09-11 06:20:00ChinaUnix专家徽章
日期:2015-06-30 16:29:48ChinaUnix专家徽章
日期:2015-06-30 16:29:342015年中国系统架构师大会
日期:2015-06-29 16:11:28
3 [报告]
发表于 2015-06-12 09:32 |只看该作者
楼主的帖子我也醉了   送的书。。。。
1.nagios在使用中遇到哪些问题?
nagios 好像遇到好多问题  邮件提醒   监控数据不更新啊  添加之后不监控啊
2.nagios插件是否编写过?可以举例说明。
没有写过 插件   最新学习了python  觉得可以看看 应该不难
3.如何扩展Nagios,以实现自定义监控?
好像就是 上边的东西啊  自己写插件手机信息
4.如何借助Nagios监测常用服务?
常用服务 nagios  好像可以直接添加的  达不到需求的时候 才是自己写

论坛徽章:
6
丑牛
日期:2013-09-17 00:18:40未羊
日期:2013-10-31 12:10:47午马
日期:2013-12-07 01:58:50水瓶座
日期:2013-12-24 22:43:12水瓶座
日期:2014-03-15 21:12:13操作系统版块每日发帖之星
日期:2016-08-07 06:20:00
4 [报告]
发表于 2015-06-12 10:22 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
17
2015年辞旧岁徽章
日期:2015-03-03 16:54:152017金鸡报晓
日期:2017-02-08 10:39:422017金鸡报晓
日期:2017-01-10 15:19:56JAVA
日期:2016-11-01 13:25:46C
日期:2016-10-25 16:01:4715-16赛季CBA联赛之八一
日期:2016-06-21 23:38:0815-16赛季CBA联赛之山东
日期:2016-05-12 12:49:54IT运维版块每日发帖之星
日期:2016-04-20 06:20:00IT运维版块每日发帖之星
日期:2016-03-22 06:20:00黄金圣斗士
日期:2015-11-24 10:43:13IT运维版块每日发帖之星
日期:2015-08-25 06:20:002015亚冠之德黑兰石油
日期:2015-08-22 22:55:54
5 [报告]
发表于 2015-06-12 10:23 |只看该作者
本帖最后由 ccjsj1 于 2015-06-12 10:25 编辑

以前写的检查hpux内存插件,调用swapinfo命令,取结果后按nagios格式输出,请参考:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. #define OK       0
  5. #define WARNING  1
  6. #define CRITICAL 2
  7. #define UNKNOWN  3

  8. #define LEN 1023
  9. #define LEN_SHORT 24

  10. int main() {
  11.         int ret;
  12.         FILE *fp;

  13.         int line=0;
  14.         char readbuf[256];

  15.         char available_swap[LEN_SHORT];
  16.         char used_swap[LEN_SHORT];
  17.         char free_swap[LEN_SHORT];
  18.         char use_percent_swap[LEN_SHORT];

  19.         char available_mem[LEN_SHORT];
  20.         char used_mem[LEN_SHORT];
  21.         char free_mem[LEN_SHORT];
  22.         char use_percent_mem[LEN_SHORT];

  23.         int i=0,j=0;
  24.         char *str,*str_swap,*str_mem;


  25.         int exitstatus=OK;

  26.         char *exit_status[4]={"OK","WARNING","CRITICAL","UNKNOWN"};

  27.         char status_information[LEN];
  28.         char performance_data[LEN];

  29.         fp=popen("/usr/sbin/swapinfo -atm","r");
  30.         if(fp==NULL) {
  31.                 fprintf(stderr,"fopen() error.\n");
  32.                 return -1;
  33.         }

  34.         while(fgets(readbuf,256,fp)!=NULL) {
  35.                 line++;
  36.         //        printf("line=%d\n",line);

  37.                 if(line==3) {
  38.                         for(str=strtok(readbuf," %");str;str=strtok(NULL," %")) {
  39.                                 i++;

  40.                                 if(i==2) {
  41.                                         sprintf(available_swap,"%s",str);
  42.                                 //        printf("available_swap=%s\n",available_swap);
  43.                                 }
  44.                                 else if(i==3) {
  45.                                         sprintf(used_swap,"%s",str);
  46.                                 //        printf("used_swap=%s\n",used_swap);
  47.                                 }
  48.                                 else if(i==4) {
  49.                                         sprintf(free_swap,"%s",str);
  50.                                 //        printf("free_swap=%s\n",free_swap);
  51.                                 }
  52.                                 else if(i==5) {
  53.                                         sprintf(use_percent_swap,"%s",str);
  54.                                 //        printf("use_percent_swap=%s\n",use_percent_swap);
  55.                                         break;
  56.                                 }
  57.                         }
  58.                 }

  59.                 if(line==5) {
  60.                         for(str=strtok(readbuf," %");str;str=strtok(NULL," %")) {
  61.                                 j++;

  62.                                 if(j==2) {
  63.                                         sprintf(available_mem,"%s",str);
  64.                                 //        printf("available_mem=%s\n",available_mem);
  65.                                 }
  66.                                 else if(j==3) {
  67.                                         sprintf(used_mem,"%s",str);
  68.                                 //        printf("used_mem=%s\n",used_mem);
  69.                                 }
  70.                                 else if(j==4) {
  71.                                         sprintf(free_mem,"%s",str);
  72.                                 //        printf("free_mem=%s\n",free_mem);
  73.                                 }
  74.                                 else if(j==5) {
  75.                                         sprintf(use_percent_mem,"%s",str);
  76.                                 //        printf("use_percent_mem=%s\n",use_percent_mem);

  77.                                         break;
  78.                                 }
  79.                         }
  80.                 }

  81.         }

  82. //      sprintf(use_percent_sawap,"%.2d",atoi(used_swap)/atoi(available_swap));
  83. //      sprintf(use_percent_mem,"%.2d",atoi(used_mem)/atoi(available_mem));

  84. //      printf("line=%d\n",line);

  85.         ret=pclose(fp);
  86.         if(ret!=NULL) {
  87.                 perror("pclose");
  88.         }

  89. //        printf("-------------use_percent_mem=%d\n",atoi(use_percent_mem));

  90.         if(atoi(use_percent_mem)<=80) {
  91.                 exitstatus=OK;
  92.         }
  93.         else if(atoi(use_percent_mem)>80 && atoi(use_percent_mem)<90) {
  94.                 exitstatus=WARNING;
  95.         }
  96.         else if(atoi(use_percent_mem)>90) {
  97.                 exitstatus=CRITICAL;
  98.         }
  99.         else {
  100.                 exitstatus=UNKNOWN;
  101.         }
  102.                

  103.         sprintf(status_information,"Memory Usage - %s%s RAM, %s%s Swap",use_percent_mem,"%",use_percent_swap,"%");
  104. //        printf("status_information=%s\n",status_information);

  105.         sprintf(performance_data,"phyUsed=%s%s;;;0;100 swpUsed=%s%s;;;0;100",use_percent_mem,"%",use_percent_swap,"%");
  106. //        printf("performance_data=%s\n",performance_data);

  107.         printf("%s: %s | %s\n",exit_status[exitstatus],status_information,performance_data);

  108.         return exitstatus;
  109. }
复制代码

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
6 [报告]
发表于 2015-06-12 11:33 |只看该作者
很简单,没啥别的。
看返回值0/1/2,

写到commands.cfg里面就好了。

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
7 [报告]
发表于 2015-06-12 15:21 |只看该作者
按照Nagios的插件规范,你可以用任何语言来写Nagios的插件,只要能按你需要的状态返回0/1/2值就可以了.
目前遇到的Nagios的问题,最多的是报警的问题.如果外部线路有问题,会造成报警邮件发不出去,也就没法报警了.
至于监控,nagios默认提供的插件就可以满足绝大多数应用的场合了,通过Nrpe,可以实现监控远端windows/Linux机器状态等高级别的信息.

求职 : Linux运维
论坛徽章:
203
拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:182015年亚洲杯之约旦
日期:2015-04-05 20:08:292015年亚洲杯之澳大利亚
日期:2015-04-09 09:25:552015年亚洲杯之约旦
日期:2015-04-10 17:34:102015年亚洲杯之巴勒斯坦
日期:2015-04-10 17:35:342015年亚洲杯之日本
日期:2015-04-16 16:28:552015年亚洲杯纪念徽章
日期:2015-04-27 23:29:17操作系统版块每日发帖之星
日期:2015-06-06 22:20:00操作系统版块每日发帖之星
日期:2015-06-09 22:20:00
8 [报告]
发表于 2015-06-12 23:25 |只看该作者
@expert1
0:成功
1:警告
2:失败
nrpe貌似不能安装在Windows上吧

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
9 [报告]
发表于 2015-06-13 09:50 |只看该作者
Nrpe安装在nagios服务器中,windows上安装NSClient++

论坛徽章:
17
2015年辞旧岁徽章
日期:2015-03-03 16:54:152017金鸡报晓
日期:2017-02-08 10:39:422017金鸡报晓
日期:2017-01-10 15:19:56JAVA
日期:2016-11-01 13:25:46C
日期:2016-10-25 16:01:4715-16赛季CBA联赛之八一
日期:2016-06-21 23:38:0815-16赛季CBA联赛之山东
日期:2016-05-12 12:49:54IT运维版块每日发帖之星
日期:2016-04-20 06:20:00IT运维版块每日发帖之星
日期:2016-03-22 06:20:00黄金圣斗士
日期:2015-11-24 10:43:13IT运维版块每日发帖之星
日期:2015-08-25 06:20:002015亚冠之德黑兰石油
日期:2015-08-22 22:55:54
10 [报告]
发表于 2015-06-15 12:17 |只看该作者
本帖最后由 ccjsj1 于 2015-06-15 12:20 编辑

回复 6# expert1

还有个返回值 3:unknow,一般是脚本执行异常是返回这个值;

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP