月度归档:2016年02月

自定义Nagios报警脚本

概述

Nagios可以使用邮件报警,但是如果使用IM软件提供的API进行报警的话,时效性上来说必然是会更好的。

另外如果使用自定义的报警脚本,可以针对报警做更多的事情,譬如限频,异步发送,记录入库等操作。

总而言之就是可以拥有更为灵活的工具。

关键点

开发语言

众多的Nagios插件均使用Perl编写,如 监控Redis 中使用到的工具。

选用Perl语言对于我来说并不是一个好的选择,如果选用了Perl,那么在主要使用PHP的环境下,不能方便的重复利用已有框架的各种工具,同时从语言的熟悉程度上来说,自然是PHP胜过Perl。

综上,选用PHP作为插件开发语言。

选用PHP作为Nagios报警插件的开发语言,需要在脚本的首行指定 Shebang ,即指定PHP可执行程序的绝对路径,形如:

Shebang之下仍然需要使用 <?php 标签。

同时,为了能让Nagios能直接执行报警插件,需要赋予可执行权限:

脚本输入输出

输入

脚本的输入方式与普通的命令行工具并无太多区别,可以使用 getopt 来获取输入的参数。

由于需要实现限频,以及针对主机和服务做一些处理,定义了如下的参数:

参数 说明
u 通知用户
m 报警消息体
r 频率限制值,秒为单位
h 主机
p 端口
l 通知等级,即OK/CRITICAL/WARNING/UNKNOW等
n 通知类型,即PROBLEM/CUSTOM等

限频的目的在于防止接收过多信息,避免必须处理的信息无法及时被发现。

而针对服务恢复正常的信息,不需要限频。

输出

Nagios的插件通过返回值确定这次检验的状态,即:

Exit code 状态
0 OK
1 WARNING
2 CRITICAL
3 UNKNOWN

不过由于是报警脚本,不妨直接让脚本返回0吧。

自定义变量

Nagios在调用编写的报警脚本时,通过定义好的command格式,完成传参。

对应到每一个联系人,需要有变量告知联系人的联系方式,针对IM,比如QQ,自然是QQ号。查阅Nagios预定义宏,会发现并没有QQ号这样的预定义宏。

当然可以选用预定义的 CONTACTPAGER 。考虑到寻呼机已经几乎没人使用了,可以借用一下变量。

针对各种工具(IM/内部通信接口/短信平台接口等),需要自定义。

关于自定义,Nagios的文档已有说明,这里简单提及一下:

  • 自定义变量必须以_开头以防止与预定义变量冲突
  • 自定义变量使用时需要转为全大写
  • 自定义变量会在前方加上所属的对象类型

针对第三点,简单说来,针对Contact,即联系人这一对象,如果定义了名为uid的自定义变量,那么,在contact的配置中,需要写成_uid,而实际在配置command时,会变为$_CONTACTUID$

配置commands

新增一个发送报警命令send_pm,定义这一自定义报警的调用方式。

参数列表正如上文提及的。

报警内容为了简短,只会发送主机名、服务名称以及检查结果的首行。

配置contacts

在需要报警的联系人配置中,加上自定义的uid变量,以及指定报警方法:

以上。

一些简单的tmux设置

概述

如果使用Linux作为服务器的操作系统,通过ssh操作时,会出现一个困难的选择:是否需要打开n个终端窗口?

如果服务器可以直接ssh的话,那么通过复用会话的方式似乎还算是个好选择,或者编写一个expect登陆脚本完成自动登陆操作。

当然,如果有如下需求:

  • 回家之后继续在公司的工作
  • 防止偶发的网络断开引起的重新连接
  • 运行时同时使用监控软件查看运行状态

那么这时候就需要使用终端复用软件了。

问题

tmux这个终端复用软件的强大无需多说,众多复杂的设置似乎对我来说并没有必要。而在使用中,自己曾经遇到过这些问题:

  • 默认的前缀按键Ctrl+b比较难按
  • 部分管理的快捷键并不方便(如关闭window,Ctrl+b -> Shift+7 -> y)或者并不形象(比如分割窗口)

需求

针对上面的问题,需求就变成了:

  • 能快速创建、切换pane(充分利用屏幕空间)
  • 快速切换window(可以直接通过组合数字键等方式切换)
  • 按键要便捷

细化一下,就变成了:

  • 能够通过数字键切换window
  • 能够顾通过方向键切换相邻window
  • 通过两次按键的组合键完成创建、切换、关闭window的操作
  • 通过两次按键的组合键完成创建、切换、关闭pane的操作
  • 通过-完成纵向切分window的操作
  • 通过\完成横向切分window的操作(\与|在一个按键上)
  • 快捷键前缀由C-b变为C-x

tmux-multi-pane-effect

配置

其中M表示键盘上的option/alt键S表示Shift键

如果不想增加关闭前的确认步骤,只需去掉指令中的confirm-before

还有一步

使用iTerm2时,为了能够让M键(即键盘上的option/alt键)能够完成上述工作,还需要进行设定:

tmux-iterm2-config

键盘上的两个option/alt键只需使用一个即可。