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

Posted patrick0715

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)

 

以上是关于Prometheus + consul + grafana 监控体系搭建1的主要内容,如果未能解决你的问题,请参考以下文章

prometheus+grafana+consul+supervisor搭建监控系统之supervisor搭建

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

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

Centos7.5 Prometheus2.5配置和基于Consul1.2.4的服务发现

Prometheus-Consul-Api

prometheus基于基于consul服务发现