• Prometheus + consul + grafana 监控体系搭建1


    Consul 搭建(忽略,网上很多例子)

    Consul 用 Golang 实现,因此具有天然可移植性(支持 Linux、windows 和 Mac OS X ),它的安装包仅包含一个可执行文件,方便部署,与 Docker 等轻量级容器可无缝配合。

    consul 启动方式:

    nohup  ./consul agent -server -ui -bootstrap-expect 1 -data-dir /data/consul/ -client=0.0.0.0 &

    查看节点信息:

    ./consul operator raft list-peers

    浏览器中访问http://localhost:8500即可看到consul管理界面,如下图所示:

    可以通过./consul command --help查看具体某个指令支持的参数.比如./consul agent --help

    步骤二:写入源数据至consul 中(从cmdb 写入数据到consul中, 打标签动作)

    #!/usr/bin/env python
    # enconding:utf-8
    import requests
    import json
    
    token = requests.get("http://cmdb.patrcik.com/api/auth/login?username=....&password=....").json()['info']['data']['token']
    servers = "http://cmdb.patrick.com/api/servers/list?token=%s" % token
    r = requests.get(servers).json()['info']['data']
    #排除指定IP 端口非9100 node_expoer
    exclude = ["172.16.0.21", "172.16.0.20",]
    for data in r:
        try:
            # print(data)
            hostname = data.get('hostname', '')
            ip = str(data.get('ip', ''))
            appCodeResponse = requests.get("http://cmdb.parick.com/search/ip?ip={}".format(ip)).json()["data"]
            appCode = appCodeResponse["appCode"] if appCodeResponse.has_key("appCode") else "none"
            host_id = data.get('host_id')
            dc = data.get('dc', 'UC')
            application = data.get('module', 0)
            type = data.get('type', 'tomcat')
            # print(data.get('dept',''))
            try:
                group = data.get('dept', 'missfresh-com').split('-')[1]
            except:
                group = data.get('dept', 'missfresh-com')
            depart = data.get('dept', 'missfresh-com').split('-')[0]
            # if data.get('state') == "RUNNING":
            if ip in exclude:
                port = 9102
            else:
                port = 9100
            body = {'id': host_id,
                    'name': hostname,
                    'address': ip,
                    'tags': [depart, group, application, type, dc, appCode],
                    'port': port,
                    'checks': [{'http': 'http://{}:{}'.format(ip, port), 'interval': '15s'}]
                    }
            r = requests.put('http://127.0.0.1:8500/v1/agent/service/register', data=json.dumps(body))
            # print body, r.status_code
        except Exception, e:
            print(e.message)
            pass

    注意(对于不通的机器做下线剔除操作):

    import requests
    import json
    import time
    from urllib import quote
    m = quote('up != 1')
    r = requests.get('http://prom.patrick.com/api/v1/query?query=%s' % m).json()
    for metric in r['data']['result']:
        if metric['metric']['id'] != 'consul':
            service = metric['metric']['id']
            r = requests.put('http://127.0.0.1:8500/v1/agent/service/deregister/%s' % service)
  • 相关阅读:
    上传文件
    Python中@staticmethod和@classmethod的作用和区别
    面向对象 类
    成员修饰符
    class 类 笔记
    模块&包
    java 文件上传下载
    redis 基本操作命令
    redis 和 mysql 的主从复制
    mysql的日志文件及其作用
  • 原文地址:https://www.cnblogs.com/patrick0715/p/12884364.html
Copyright © 2020-2023  润新知