commit 97020c935f5a7d4814c71b62240444adca97f9bb Author: dustoair <107600816+dustoair@users.noreply.github.com> Date: Thu Aug 4 18:45:01 2022 +0800 open src diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f4b7529 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +venv +.idea +big.txt +big.txt.gz +big.txt.gz.gpg +big.txt.gpg +big.txt.lzma +big.txt.lzma.gpg +big.txt.lzma.gpg.gpg +big.txt.lzma.gpg.gpg.gpg +dump.txt +test.txt \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/k8sZabbix.iml b/.idea/k8sZabbix.iml new file mode 100644 index 0000000..74d515a --- /dev/null +++ b/.idea/k8sZabbix.iml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..71daf0a --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..1c8354a --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/get_k8s.py b/get_k8s.py new file mode 100644 index 0000000..d20a5db --- /dev/null +++ b/get_k8s.py @@ -0,0 +1,140 @@ +#!/usr/bin/python3 +import json +import datetime +import sys +import os +import math +import urllib3 +import requests +import re + +urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) + +zabbix_sender = "/usr/local/zabbix/bin/zabbix_sender" +zabbix_server = "192.168.1.233" +clientname = "k8s_master" + +# k8s的api地址 +url = "https://192.168.1.140:6443" + +# k8s的token +token = "e11111111-k8s-token-111111w" + + +def get_result(api_name): + headers = {"Authorization": "Bearer " + token} + json_data = requests.get(url + api_name, headers=headers, verify=False) + return json_data.json() + + +# 时间转换,把所有服务的创建时间变成运行时间 +def Trantime(time_data): + time = re.match(r"(\d+)-(\d+)-(\d+).*?(\d+):(\d+):(\d+)", time_data) + total_send = round((datetime.datetime.now() - datetime.datetime(int(time.group(1)), int(time.group(2)), + int(time.group(3)), int(time.group(4)), + int(time.group(5)), + int(time.group(6)))).total_seconds()) + return str(math.floor(total_send / 86400)).split(".")[0] + "d" + \ + str(math.floor((total_send % 86400) / 3600)).split(".")[0] + "h" + + +# 把所有的单位转换成b +def Tranunit(unit_data): + unit = re.match(r"(\d+)(.*)", unit_data) + value = int(unit.group(1)) + if unit.group(2) == "K": + return value * 1000 + elif unit.group(2) == "Ki": + return value * 1024 + elif unit.group(2) == "M": + return value * 1000 * 1000 + elif unit.group(2) == "Mi": + return value * 1024 * 1024 + elif unit.group(2) == "G": + return value * 1000 * 1000 * 1000 + elif unit.group(2) == "Gi": + return value * 1024 * 1024 * 1024 + elif unit.group(2) == "n": + return math.ceil(value / 1000 / 1000) + elif unit.group(2) == "m": + return value + else: + return value + + +# 对数据进行zabbix_sender发送 +def send_data(data, dis_key, key): + result = json.dumps({"data": data}, sort_keys=True, ensure_ascii=False) + cmd = "{0} -z {1} -s {2} -k {3} -o '{4}'>/dev/null".format(zabbix_sender, zabbix_server, clientname, dis_key, + result) + os.system(cmd) + for i in data: + for value in i.keys(): + if value != "{#NAME}": + cmd = "{0} -z {1} -s {2} -k {3}[{4}.{5}] -o '{6}'>/dev/null".format(zabbix_sender, zabbix_server, + clientname, key, i["{#NAME}"], + i[value][0], i[value][1]) + os.system(cmd) + print(cmd) + + +# 获取所有k8s节点的信息 +def get_node(): + get_nodes = [] + node_result = get_result("/api/v1/nodes") + node_use_result = get_result("/apis/metrics.k8s.io/v1beta1/nodes") + for j in node_use_result.get("items"): + for i in node_result.get("items"): + if i.get("metadata").get("name") == j.get("metadata").get("name"): + data = {"{#NAME}": i.get("metadata").get("name"), + "{#STATUS}": ["status", i.get("status").get("conditions")[-1].get("type") if + i.get("status").get("conditions")[-1].get("status") == "True" else "NotReady"], + "{#IP}": ["ip", i.get("status").get("addresses")[0].get("address")], + "{#KUBELET_VERSION}": ["version", i.get("status").get("nodeInfo").get("kubeletVersion")], + "{#OS_IMAGE}": ["os_image", i.get("status").get("nodeInfo").get("osImage")], + "{#CPU}": ["cpu", i.get("status").get("capacity").get("cpu")], + "{#MEMORY}": ["memory", Tranunit(i.get("status").get("capacity").get("memory"))], + "{#LIMIT_STORAGE}": ["storage", + Tranunit(i.get("status").get("capacity").get("ephemeral-storage"))], + "{#RUNTIME}": ["runtime", Trantime(i.get("metadata").get("creationTimestamp"))], + "{#USECPU}": ["usecpu", Tranunit(j.get("usage").get("cpu"))], + "{#USEMEMORY}": ["usememory", Tranunit(j.get("usage").get("memory"))] + } + + get_nodes.append(data) + send_data(get_nodes, "getnode", "node") + + +# 获取k8s组件的健康信息 +def get_health(): + get_healths = [] + health_result = get_result("/api/v1/componentstatuses") + for i in health_result.get("items"): + data = {} + data = {"{#NAME}": i.get("metadata").get("name"), + "{#STATUS}": ["status", i.get("conditions")[0].get("type")], + "{#MESSAGE}": ["message", i.get("conditions")[0].get("message")] + } + get_healths.append(data) + send_data(get_healths, "gethealth", "health") + + +# 获取k8s的所有pod +def get_pod(): + get_pods = [] + pod_result = get_result("/api/v1/pods") + for i in pod_result.get("items"): + data = {"{#NAME}": i.get("metadata").get("name"), + "{#RUNTIME}": ["runtime", Trantime(i.get("metadata").get("creationTimestamp"))], + "{#STATUS}": ["status", i.get("status").get("phase")], + "{#RESTARTCOUNT}": ["restartcount", i.get("status").get("containerStatuses")[0].get("restartCount")] + } + + get_pods.append(data) + send_data(get_pods, "getpod", "pod") + + +if __name__ == "__main__": + cmd = "{0}()".format(sys.argv[1]) + eval(cmd) + print("采集完成") diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..a391145 --- /dev/null +++ b/readme.md @@ -0,0 +1,1376 @@ +获取k8s的api地址 +```bash +cat /etc/kubernetes/kubelet.conf |grep server +``` + +在K8S 的Master主机执行命令,生成令牌: +```bash +kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}') +``` + + +调用: +```bash +#!/usr/bin/bash +/usr/bin/python3 get_k8s.py get_pod +/usr/bin/python3 get_k8s.py get_health +/usr/bin/python3 get_k8s.py get_node +``` + + +xml模板: +```xml + + + 4.2 + 2020-06-12T08:42:43Z + + + 中间件模板 + + + + + + + +``` \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..5675524 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +urllib3 +requests \ No newline at end of file