美文网首页运维空间程序员系统运维专家
ansible获取服务器cpu、内存、swap信息存入elast

ansible获取服务器cpu、内存、swap信息存入elast

作者: 神力无敌_61b6 | 来源:发表于2017-10-10 16:19 被阅读384次

    运维平台开发,最初使用zabbix监控服务器信息,zabbix好用是好用,但也比较复杂、庞大,因此想摆脱第三方监控工具独立对服务器信息进行监控。
    在linux中其实一个top命令可以解决,那么监控别的服务器就可以用ansible来完成,具体步骤
    1.使用ansible 2.0接口调用top命令

    a=MyRunner('/etc/ansible/hosts')
    a.run('all','shell','top -bi -n 2 -d 0.02')
    b=a.get_result()
    succ=b['success']
    

    2.分析数据,由于第一条数据一直不变,所以取第二条数据

    for i in succ:
         ....
    

    3.正则表达式,筛选出数值

    # cpu处理 格式
    # %Cpu(s):  3.7 us,  1.3 sy,  0.0 ni, 91.3 id,  3.7 wa,  0.0 hi,  0.0 si,  0.0 st
    cpu = patt.findall(c[2].split(':')[1])
    # 内存处理
    # KiB Mem :  1017184 total,    70824 free,   533504 used,   412856 buff/cache
    memory = patt1.findall(c[3].split(':')[1])  
    # 交换空间
    # KiB Swap:  2097148 total,  1257612 free,   839536 used.   270960 avail Mem
    swap = patt1.findall(c[4].split(':')[1])
    

    4.保存到elasticsearch

    es.index(index="monitor", doc_type=i, id=None,
                         body={"cpu": {"us": cpu[0], "sy": cpu[1]
                             , "ni": cpu[2], "id": cpu[3], "wa": cpu[4]
                             , "hi": cpu[5], "si": cpu[6], "st": cpu[7]}
                             , "memory": {"totalMem": memory[0], "freeMem": memory[1]
                                 , "usedMem": memory[2], "buffcacheMem": memory[3]}
                             , "swap": {"totalSwap": swap[0], "freeSwap": swap[1]
                                 , "usedSwap": swap[2], "availSwap": swap[3]}
                             , "time": nstr
                             , "timespan": int(nspan)
                               })
    

    最后使用任务调度工具定时执行
    elasticsearch保存结果格式如下:

    {
        "took": 1,
        "timed_out": false,
        "_shards": {
            "total": 5,
            "successful": 5,
            "failed": 0
        },
        "hits": {
            "total": 3,
            "max_score": 1,
            "hits": [
                {
                    "_index": "monitor",
                    "_type": "yt_ops",
                    "_id": "AV8FSr0ENPmlBHBapUB-",
                    "_score": 1,
                    "_source": {
                        "swap": {
                            "availSwap": "269840",
                            "usedSwap": "839388",
                            "freeSwap": "1257760",
                            "totalSwap": "2097148"
                        },
                        "time": "2017-10-10 15:58:24",
                        "timespan": 1507622304,
                        "cpu": {
                            "ni": "0.0",
                            "sy": "33.3",
                            "hi": "0.0",
                            "wa": "0.0",
                            "si": "0.0",
                            "id": "66.7",
                            "us": "0.0",
                            "st": "0.0"
                        },
                        "memory": {
                            "buffcacheMem": "412048",
                            "totalMem": "1017184",
                            "freeMem": "70572",
                            "usedMem": "534564"
                        }
                    }
                },
                {
                    "_index": "monitor",
                    "_type": "yt_tools",
                    "_id": "AV8FSrx0NPmlBHBapUB8",
                    "_score": 1,
                    "_source": {
                        "swap": {
                            "availSwap": "6014056",
                            "usedSwap": "14772",
                            "freeSwap": "8242760",
                            "totalSwap": "8257532"
                        },
                        "time": "2017-10-10 15:58:24",
                        "timespan": 1507622304,
                        "cpu": {
                            "ni": "0.0",
                            "sy": "0.0",
                            "hi": "0.0",
                            "wa": "0.0",
                            "si": "0.0",
                            "id": "50.0",
                            "us": "50.0",
                            "st": "0.0"
                        },
                        "memory": {
                            "buffcacheMem": "5333340",
                            "totalMem": "7994372",
                            "freeMem": "1156972",
                            "usedMem": "1504060"
                        }
                    }
                }
            ]
        }
    }
    
    完整的代码
    # -*- coding: utf-8 -*-
    from ansible.run import MyRunner
    from elasticsearch import Elasticsearch
    import re,time
    ISOTIMEFORMAT = '%Y-%m-%d %X'
    es = Elasticsearch('http://127.0.0.1:9200/')
    a=MyRunner('/etc/ansible/hosts')
    a.run('all','shell','top -bi -n 2 -d 0.02')
    b=a.get_result()
    succ=b['success']
    print succ['yt_ops']['stdout']
    print '######################'
    patt = re.compile(r"(\d+\.\d+)")
    patt1 = re.compile(r"(\d+)")
    nspan = time.time()
    nstr = time.strftime(ISOTIMEFORMAT, time.localtime(nspan))
    
    for i in succ:
        results = succ[i]['stdout'].split('\n\n')
        # 获取第二个top结果
        c = results[2].split('\n')
        # cpu处理 格式
        # %Cpu(s):  3.7 us,  1.3 sy,  0.0 ni, 91.3 id,  3.7 wa,  0.0 hi,  0.0 si,  0.0 st
        cpu = patt.findall(c[2].split(':')[1])
        #print c[2].split(':')[1]
        #print cpu
        # 内存处理
        # KiB Mem :  1017184 total,    70824 free,   533504 used,   412856 buff/cache
        memory = patt1.findall(c[3].split(':')[1])
        #print 
        #print memory
        # 交换空间
        # KiB Swap:  2097148 total,  1257612 free,   839536 used.   270960 avail Mem
        swap = patt1.findall(c[4].split(':')[1])
        es.index(index="monitor", doc_type=i, id=None,
                         body={"cpu": {"us": cpu[0], "sy": cpu[1]
                             , "ni": cpu[2], "id": cpu[3], "wa": cpu[4]
                             , "hi": cpu[5], "si": cpu[6], "st": cpu[7]}
                             , "memory": {"totalMem": memory[0], "freeMem": memory[1]
                                 , "usedMem": memory[2], "buffcacheMem": memory[3]}
                             , "swap": {"totalSwap": swap[0], "freeSwap": swap[1]
                                 , "usedSwap": swap[2], "availSwap": swap[3]}
                             , "time": nstr
                             , "timespan": int(nspan)
                               })
    
    

    ps:ansible2.0接口没写出来想要的可以问我要

    相关文章

      网友评论

      本文标题:ansible获取服务器cpu、内存、swap信息存入elast

      本文链接:https://www.haomeiwen.com/subject/vlzvyxtx.html