You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.8 KiB
Python
76 lines
2.8 KiB
Python
#!/usr/bin/python
|
|
# -*- coding: utf8 -*-
|
|
|
|
|
|
from bs4 import BeautifulSoup
|
|
import requests
|
|
from os import sep
|
|
import time, json
|
|
|
|
|
|
class omg_action_lag():
|
|
kafka_url = 'http://cmak.bitea.one'
|
|
|
|
def get_consumer(self, cluster, topic):
|
|
topic_url = self.kafka_url + sep + 'clusters' + sep + cluster + sep + 'topics' + sep + topic
|
|
html_content = requests.get(topic_url)
|
|
soup = BeautifulSoup(html_content.text)
|
|
all_link = soup.find_all('a', href=True)
|
|
consumer_dict = {}
|
|
for i in all_link:
|
|
itopic = i.text
|
|
ihref = i['href']
|
|
if "consumer" in ihref and topic in ihref:
|
|
consumer_dict[itopic] = ihref
|
|
return consumer_dict
|
|
|
|
def get_consumer_lag(self, cluster, topic, lagout):
|
|
consumer_dict = self.get_consumer(cluster, topic)
|
|
for consumer, link in consumer_dict.items():
|
|
consumer_url = self.kafka_url + link
|
|
consumer_content = requests.get(consumer_url)
|
|
soup = BeautifulSoup(consumer_content.text)
|
|
|
|
if "console" in consumer or "test" in consumer:
|
|
pass
|
|
else:
|
|
all_td = soup.find_all('td')
|
|
|
|
for i in range(len(all_td)):
|
|
if 'Total Lag' in all_td[i]:
|
|
lag_tmp = all_td[i + 1]
|
|
lag_temp = str(lag_tmp.text)
|
|
lag = int(lag_temp.replace(',', ''))
|
|
lagout = int(lagout)
|
|
# 给过期超过设定值的consumer的lag设置为0
|
|
if lag > lagout:
|
|
lag = 0
|
|
ts = int(time.time())
|
|
tag = topic + "_lag"
|
|
endpoint = topic + "_lag"
|
|
payload = []
|
|
|
|
payload.append(
|
|
{
|
|
"endpoint": endpoint,
|
|
"metric": tag,
|
|
"timestamp": ts,
|
|
"step": 30,
|
|
"value": lag,
|
|
"counterType": "GAUGE",
|
|
"tags": "%s_status=%s,type=%s" % (topic, consumer, "TC"),
|
|
}
|
|
)
|
|
r = requests.post("http://falcon.bitea.one:1988/v1/push", data=json.dumps(payload))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
# 检查参数,可以配置多个集群及话题,增加一个参数,忽略掉不消费的消费者打点
|
|
ck_team = (
|
|
("nft-kafka", "collection_events", "100000"),("nft-kafka","raw_action_nft","100000"))
|
|
for i in ck_team:
|
|
cluster = i[0]
|
|
topic = i[1]
|
|
lagout = i[2]
|
|
g = omg_action_lag()
|
|
g.get_consumer_lag(cluster, topic, lagout) |