https://www.cnblogs.com/keithtt/p/14714814.html
from kubernetes import client, config, watchfrom elasticsearch import Elasticsearchimport arrowimport sysimport requestsimport jsondingding_webhook = "https://oapi.dingtalk.com/robot/send?access_token=xxxxx"hosts = ['172.16.21.39:9200','172.16.21.40:9200','172.16.21.41:9200']def send_text(content):data = {"msgtype": "text","text": {"content": content}}requests.post(url=dingding_webhook, json=data)now = arrow.now('Asia/Shanghai')index = "kube-events"index_today = "{}.{}".format(index, now.format("YYYY.MM.DD"))cluster_name = sys.argv[1]kube_config = sys.argv[2]with Elasticsearch(hosts=hosts, timeout=120) as es:if not es.indices.exists(index=index_today):es.indices.create(index=index_today)# Configs can be set in Configuration class directly or using helper utilityconfig.load_kube_config(config_file=kube_config)v1 = client.CoreV1Api()w = watch.Watch()try:## 传参## kwargs = {'filed_selector':'metadata.namespace=daiyi', 'resource_version';2934}## for event in w.stream(v1.list_event_for_all_namespaces, **kwrags):for event in w.stream(v1.list_event_for_all_namespaces):doc = {"cluster_name": cluster_name,"time_iso8601": arrow.Arrow.fromdatetime(event['object'].metadata.creation_timestamp).isoformat(),"namespace": event['object'].metadata.namespace,"type": event['object'].type,"reason": event['object'].reason,"message": event['object'].message}# print(json.dumps(doc))# if doc["type"] == "Warning":# send_text('[ {} ]- {}'.format(cluster_name, doc["message"]))if es.exists(index=index_today, doc_type=index, id=event['object'].metadata.uid):continuees.create(index=index_today, doc_type=index, body=doc, id=event['object'].metadata.uid)except Exception as e:passw.stop()
使用 supervisord 将程序后台运行。
[program:ali-14]command = /usr/local/bin/python3.6 /ops/scripts/kube_events.py ali-14 /ops/k8s_config/ali-14autorestart = trueredirect_stderr = truestdout_logfile = /ops/logs/ali-14.logstopasgroup = true[program:m7]command = /usr/local/bin/python3.9 /ops/scripts/kube_events.py m7 /ops/k8s_config/m7autorestart = trueredirect_stderr = truestdout_logfile = /ops/logs/m7.logstopasgroup = true[program:cm]command = /usr/local/bin/python3.9 /ops/scripts/kube_events.py cm /ops/k8s_config/cmautorestart = trueredirect_stderr = truestdout_logfile = /ops/logs/cm.logstopasgroup = true[program:meteo]command = /usr/local/bin/python3.6 /ops/scripts/kube_events.py meteo /ops/k8s_config/meteoautorestart = trueredirect_stderr = truestdout_logfile = /ops/logs/meteo.logstopasgroup = true
写入 ES 之后就可以通过 kibana 查看了。
标签: kubernetes, elk
