[工具开发] 把nagios监控脚本改成keepalived监控脚本

最近在做开发和办公环境的高可用,采用的是keepalived;keepalived基于Linux内核支持的LVS,既能实现高可用,又能实现负载均衡,非常实用。

keepalived监控服务状态时可以用多种方式,如:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK(自定义脚本方式),为了精确的监控服务的状态,我们需要编写自定义监控脚本。

目前很多公司都会部署nagios作为服务的监控平台,nagios也需要监控脚本或者程序,如果keepalived监控脚本能套用naigios的,那么就可以省去很多麻烦。但是nagios监控脚本或者程序与keepalived有一些不同:

nagios脚本或者程序的返回值:0-OK,1-Warn, 2-Critical, 3-Unknown

keepalived脚本返回值:0-OK,1-Fail,2~255-OK且退出码-2

可见,只需要把nagios脚本或者程序的返回值改一下就可以用在keepalived上了。如果是文本格式的nagios脚本,可以直接改返回值,如果是二进制格式的程序,就不能直接改了。我采用的方法是把 nagios监控程序放到python里并且修改其返回值,这样就可以给keepalived用了。

下面的例子是用python把nagios的check_dns二进制监控程序改成keepalived能用的脚本,请注意commands.getstatusoutput里的命令,就是调用的nagios二进制监控程序:

(由于我的服务不需要修改退出状态码,因此只返回0或者1)

#!/usr/bin/python
#coding: utf-8
#返回0:健康检查OK,权重保持
#返回1:健康检查失败,权重设为0
#返回2-255:健康检查OK,权重设置为:退出状态码-2

import commands
import sys, getopt
import os.path

def check_dns(server=‘‘, timeout=‘‘, name=‘‘, address=‘‘):

    status, output = commands.getstatusoutput("/usr/lib64/nagios/plugins/check_dns -s " + server + " -t " + timeout + " -H " + name + " -a " + address)
    return status

if __name__ == ‘__main__‘:

    server, timeout, name, address = ‘‘, ‘‘, ‘‘, ‘‘
    script = os.path.split(os.path.realpath(__file__))[1]

    try:
        opts, args = getopt.getopt(sys.argv[1:], "s:n:a:t:", ["server=", "name=", "address=", "timeout="])
    except getopt.GetoptError, err:
        #print str(err)
        sys.exit(3)
    for o, a in opts:
        if o in ("-s", "--server"):
            server = a
        elif o in ("-n", "--name"):
            name = a
        elif o in ("-a", "--address"):
            address = a
        elif o in ("-t", "--timeout"):
            timeout = a
        else:
            #print "usage: " + script + " -s server -n name -a address -t timeout"
            sys.exit(3)
    if server == ‘‘ or name == ‘‘ or address == ‘‘ or timeout == ‘‘:
        #print "usage: " + script + " -s server -n name -a address -t timeout"
        sys.exit(3)
    else:
        status = check_dns(server, timeout, name, address)
        if status:
            #print status
            sys.exit(1)
        else:
            #print status
            sys.exit(0)
时间: 2024-11-08 13:15:11

[工具开发] 把nagios监控脚本改成keepalived监控脚本的相关文章

linux开发脚本自动部署及监控

开发脚本自动部署及监控 1.编写脚本自动部署反向代理.web.nfs: 要求: I.部署nginx反向代理三个web服务,调度算法使用加权轮询: #!/bin/sh ngxStatus=`ps aux | grep -v grep |grep -c nginx` function ngxProxyInstall() { if [ -e /usr/sbin/nginx ];then echo "nginx already installed" exit 110 else yum inst

【游戏开发】Excel表格批量转换成CSV的小工具

一.前言 在工作的过程中,我们有时可能会面临将Excel表格转换成CSV格式文件的需求.这尤其在游戏开发中体现的最为明显,策划的数据文档大多是一些Excel表格,且不说这些表格在游戏中读取的速度,但就论占用内存来说,同样的数据量Excel表格所占用的内存要远远大于CSV,因此将Excel转换成CSV势在必行.如果单单转换一个Excel表格还好,直接另存为就搞定的,但是如何将一个文件下的N个Execl表格转成CSV呢?今天马三就来和大家一起用Python撸一个Excel表格批量转换CSV的小工具—

android launcher2开发之 有抽屉改成无抽屉

在launcher.java中在createShortcut方法中   屏蔽所有应用按钮 改动之前 View createShortcut(int layoutResId, ViewGroup parent, ShortcutInfo info) { BubbleTextView favorite = (BubbleTextView) mInflater.inflate( layoutResId, parent, false); favorite.applyFromShortcutInfo(in

【游戏开发】Excel表格批量转换成lua的转表工具

一.简介 在上篇博客<[游戏开发]Excel表格批量转换成CSV的小工具> 中,我们介绍了如何将策划提供的Excel表格转换为轻便的CSV文件供开发人员使用.实际在Unity开发中,很多游戏都是使用Lua语言进行开发的.如果要用Lua直接读取CSV文件的话,又要写个对应的CSV解析类,不方便的同时还会影响一些加载速度,牺牲游戏性能.因此我们可以直接将Excel表格转换为lua文件,这样就可以高效.方便地在Lua中使用策划配置的数据了.在本篇博客中,马三将会和大家一起,用C#语言实现一个Exce

分享一个免杀的反弹shell工具(python脚本转换成exe)

有时候网站服务器上有杀毒软件,我们上传的nc.exe.lcx.exe等工具都被杀了,这时候就需要一款免杀的工具来反弹shell. 这篇博客主要是依据国外的一片文章翻译而来,根据国外大佬的教程将Python脚本转换成exe程序即可免杀. 参考链接:https://medium.com/bugbountywriteup/antivirus-evasion-with-python-49185295caf1 第1步:安装Python2.7和Py2exe 一定要安装32位的Python 2.7和32位的P

Android开发中利用imeOptions属性将键盘回车键改成搜索等功能键【提高用户输入体验】

Android中键盘输入是用户输入交互的最常用最直接的手段,关于键盘输入,有几点可以提高用户使用体验. 第一:弹出键盘整体页面上移,使键盘不遮挡控件,需要在AndroidManifest设置对应Activity的windowSoftInputMode属性 stateVisible 设置为这个属性,可以将软键盘召唤出来,即使在界面上没有输入框的情况下也可以强制召唤出来 adjustResize 这个属性表示Activity的主窗口总是会被调整大小,从而保证软键盘显示空间. 效果如下图所示: <ac

NX二次开发-string字符串全部改成小写

1 char msg1[256]; 2 UF_OBJ_ask_name(BodyTag, msg1); 3 string s; 4 s = msg1; 5 6 string A; 7 string B; 8 //string字符串全部改成小写 9 transform(s.begin(), s.end(), back_inserter(A), ::toupper); 10 transform(AllBodyName[i].begin(), AllBodyName[i].end(), back_in

Android中如何修改编译的资源ID值(默认值是0x7F...可以随意改成0x02~0x7E)

一.技术准备 今天我们来看一下如何修改Android中编译时的资源Id的值,在讲解这内容之前,我们需要先了解一下Android中的资源编译之后的结构和编译过程,这里就不多说了,具体可以查看这篇文章: http://blog.csdn.net/jiangwei0910410003/article/details/50628894 这篇文章中,介绍了如何解析Android中编译之后的resource.arsc文件,这里就介绍了Android中资源文件编译之后的类型和格式,其实Android中资源编译

工具开发系列之:通过程序句柄操作程序

最近做了个C/S系统,是一个包含ToolBox的程序,大致的功能是在系统使用过程当中包含了该系统提供公众工具,协同完成工作.说白了就是调用一些自己开发的或是第三方的应用程序. 于是在使用过程当中,有效的协调对应的进程及线程就是比较常见的问题了,这里说一个简单的例子如何去隐藏一个程序工具. 句柄 句柄,是整个Windows编程的基础.一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类对象中的不同的实例,诸如,一个窗口,按钮,图标,滚动