--- apiVersion: v1 data: Connection_reset_reading.py: |- #!/usr/bin/env python3 # -- coding: utf-8 -- import os import sys import requests import json es_index_dict = { "sxzs-java-prod-*": "ef162b8f-7e7b-4bd9-b514-88ef312935b9" } #os.environ['ES_URL'] = "http://elasticsearch-es-http.elastic-system:9200" os.environ['ES_URL'] = "http://d1-es.uenpay.com" os.environ['ES_USER'] = "uenpay" os.environ['ES_PASSWORD'] = "123456" os.environ['DURATION'] = "15m" os.environ['define_description'] = "刷新服务Connection_reset_reading" os.environ['QUERY_CONDITION'] = "\"Connection reset reading\"" os.environ['METRIC_NAME'] = "java_error" def add_custom_labels(metric_name, base_labels, count): custom_labels = {} for key, value in os.environ.items(): if key.startswith('define_'): label_key = key.replace('define_', '', 1) custom_labels[label_key] = value all_labels = {**base_labels, **custom_labels} label_parts = [f"{k}=\"{v}\"" for k, v in all_labels.items()] labels_str = ",".join(label_parts) print(f'{metric_name}{{{labels_str}}} {count}') def es_query(es_index_name, query_condition): result = None headers = {'Content-Type': 'application/json'} es_auth = (os.getenv('ES_USER'), os.getenv('ES_PASSWORD')) es_url = f"{os.getenv('ES_URL')}/{es_index_name}/_search" duration = ("now-" + os.getenv('DURATION','15m')) body_template = { "size": 10000, "query": { "bool": { "filter": { "range": { "@timestamp": { "gte": duration } } }, "must": [ { "query_string": { "query": query_condition } } ] } } } try: r = requests.post(url=es_url, headers=headers, auth=es_auth, json=body_template) if r.status_code == 200: result = r.json() except Exception as err: print(f"An error occurred in es_query: {err}", file=sys.stderr) return result def counting(): query_condition = os.getenv('QUERY_CONDITION') metric_name = os.getenv('METRIC_NAME') for index_name in es_index_dict: try: result = es_query(index_name, query_condition) if result and 'hits' in result.keys(): count = result['hits']['total']['value'] for hit in result['hits']['hits']: if '_source' in hit and 'message' in hit['_source']: project = hit["_source"]["fields"]["project"] es_index_id = es_index_dict[index_name] base_labels = {'project': project, 'es_index_id': es_index_id, 'query_condition': query_condition.replace(" ", "%20").replace('"', '%22')} add_custom_labels(metric_name, base_labels, count) else: print('%s %d' % (metric_name, count)) except Exception as err: print(f"An error occurred in couting: {err}", file=sys.stderr) if __name__ == '__main__': counting() Null_pointer_exception-prod.py: >- #!/usr/bin/env python3 # -- coding: utf-8 -- import os import sys import requests import json es_index_dict = { "mpos-java-prod-*": "d667506f-47c3-42a3-80a6-34c1ff10fa27" } #os.environ['ES_URL'] = "http://elasticsearch-es-http.elastic-system:9200" os.environ['ES_URL'] = "http://d1-es.uenpay.com" os.environ['ES_USER'] = "uenpay" os.environ['ES_PASSWORD'] = "123456" os.environ['DURATION'] = "15m" os.environ['define_description'] = "mpos服务空指针异常" os.environ['QUERY_CONDITION'] = '"Exception error message:null" OR "java.lang.NullPointerException: null"' os.environ['METRIC_NAME'] = "java_error" def add_custom_labels(metric_name, base_labels, count): custom_labels = {} for key, value in os.environ.items(): if key.startswith('define_'): label_key = key.replace('define_', '', 1) custom_labels[label_key] = value all_labels = {**base_labels, **custom_labels} label_parts = [f"{k}=\"{v}\"" for k, v in all_labels.items()] labels_str = ",".join(label_parts) print(f'{metric_name}{{{labels_str}}} {count}') def es_query(es_index_name, query_condition): result = None headers = {'Content-Type': 'application/json'} es_auth = (os.getenv('ES_USER'), os.getenv('ES_PASSWORD')) es_url = f"{os.getenv('ES_URL')}/{es_index_name}/_search" duration = ("now-" + os.getenv('DURATION','15m')) body_template = { "size": 10000, "query": { "bool": { "filter": { "range": { "@timestamp": { "gte": duration } } }, "must": [ { "query_string": { "query": query_condition } } ] } } } try: r = requests.post(url=es_url, headers=headers, auth=es_auth, json=body_template) if r.status_code == 200: result = r.json() except Exception as err: print(f"An error occurred in es_query: {err}", file=sys.stderr) return result def counting(): query_condition = os.getenv('QUERY_CONDITION') metric_name = os.getenv('METRIC_NAME') for index_name in es_index_dict: try: result = es_query(index_name, query_condition) if result and 'hits' in result.keys(): count = result['hits']['total']['value'] for hit in result['hits']['hits']: if '_source' in hit and 'message' in hit['_source']: project = hit["_source"]["fields"]["project"] es_index_id = es_index_dict[index_name] base_labels = {'project': project, 'es_index_id': es_index_id, 'query_condition': query_condition.replace(" ", "%20").replace('"', '%22')} add_custom_labels(metric_name, base_labels, count) else: print('%s %d' % (metric_name, count)) except Exception as err: print(f"An error occurred in couting: {err}", file=sys.stderr) if __name__ == '__main__': counting() feign-Client-prod.py: |- #!/usr/bin/env python3 # -- coding: utf-8 -- import os import sys import requests import json es_index_dict = { "mpos-java-prod-*": "d667506f-47c3-42a3-80a6-34c1ff10fa27", "sxzs-java-prod-*": "ef162b8f-7e7b-4bd9-b514-88ef312935b9", } #os.environ['ES_URL'] = "http://elasticsearch-es-http.elastic-system:9200" os.environ['ES_URL'] = "http://d1-es.uenpay.com" os.environ['ES_USER'] = "uenpay" os.environ['ES_PASSWORD'] = "123456" os.environ['DURATION'] = "15m" os.environ['define_description'] = "feign调用失败" os.environ['QUERY_CONDITION'] = "\"feign Client\"" os.environ['METRIC_NAME'] = "java_error" def add_custom_labels(metric_name, base_labels, count): custom_labels = {} for key, value in os.environ.items(): if key.startswith('define_'): label_key = key.replace('define_', '', 1) custom_labels[label_key] = value all_labels = {**base_labels, **custom_labels} label_parts = [f"{k}=\"{v}\"" for k, v in all_labels.items()] labels_str = ",".join(label_parts) print(f'{metric_name}{{{labels_str}}} {count}') def es_query(es_index_name, query_condition): result = None headers = {'Content-Type': 'application/json'} es_auth = (os.getenv('ES_USER'), os.getenv('ES_PASSWORD')) es_url = f"{os.getenv('ES_URL')}/{es_index_name}/_search" duration = ("now-" + os.getenv('DURATION','15m')) body_template = { "size": 10000, "query": { "bool": { "filter": { "range": { "@timestamp": { "gte": duration } } }, "must": [ { "query_string": { "query": query_condition } } ] } } } try: r = requests.post(url=es_url, headers=headers, auth=es_auth, json=body_template) if r.status_code == 200: result = r.json() except Exception as err: print(f"An error occurred in es_query: {err}", file=sys.stderr) return result def counting(): query_condition = os.getenv('QUERY_CONDITION') metric_name = os.getenv('METRIC_NAME') for index_name in es_index_dict: try: result = es_query(index_name, query_condition) if result and 'hits' in result.keys(): count = result['hits']['total']['value'] for hit in result['hits']['hits']: if '_source' in hit and 'message' in hit['_source']: project = hit["_source"]["fields"]["project"] es_index_id = es_index_dict[index_name] base_labels = {'project': project, 'es_index_id': es_index_id, 'query_condition': query_condition.replace(" ", "%20").replace('"', '%22')} add_custom_labels(metric_name, base_labels, count) else: print('%s %d' % (metric_name, count)) except Exception as err: print(f"An error occurred in couting: {err}", file=sys.stderr) if __name__ == '__main__': counting() java.lang.NullPointerException_null-prod.py: |- #!/usr/bin/env python3 # -- coding: utf-8 -- import os import sys import requests import json es_index_dict = { "sxzs-java-prod-*": "ef162b8f-7e7b-4bd9-b514-88ef312935b9" } #os.environ['ES_URL'] = "http://elasticsearch-es-http.elastic-system:9200" os.environ['ES_URL'] = "http://d1-es.uenpay.com" os.environ['ES_USER'] = "uenpay" os.environ['ES_PASSWORD'] = "123456" os.environ['DURATION'] = "15m" os.environ['define_description'] = "刷新服务空指针异常" os.environ['QUERY_CONDITION'] = "\"java.lang.NullPointerException: null\"" os.environ['METRIC_NAME'] = "java_error" def add_custom_labels(metric_name, base_labels, count): custom_labels = {} for key, value in os.environ.items(): if key.startswith('define_'): label_key = key.replace('define_', '', 1) custom_labels[label_key] = value all_labels = {**base_labels, **custom_labels} label_parts = [f"{k}=\"{v}\"" for k, v in all_labels.items()] labels_str = ",".join(label_parts) print(f'{metric_name}{{{labels_str}}} {count}') def es_query(es_index_name, query_condition): result = None headers = {'Content-Type': 'application/json'} es_auth = (os.getenv('ES_USER'), os.getenv('ES_PASSWORD')) es_url = f"{os.getenv('ES_URL')}/{es_index_name}/_search" duration = ("now-" + os.getenv('DURATION','15m')) body_template = { "size": 10000, "query": { "bool": { "filter": { "range": { "@timestamp": { "gte": duration } } }, "must": [ { "query_string": { "query": query_condition } } ] } } } try: r = requests.post(url=es_url, headers=headers, auth=es_auth, json=body_template) if r.status_code == 200: result = r.json() except Exception as err: print(f"An error occurred in es_query: {err}", file=sys.stderr) return result def counting(): query_condition = os.getenv('QUERY_CONDITION') metric_name = os.getenv('METRIC_NAME') for index_name in es_index_dict: try: result = es_query(index_name, query_condition) if result and 'hits' in result.keys(): count = result['hits']['total']['value'] for hit in result['hits']['hits']: if '_source' in hit and 'message' in hit['_source']: project = hit["_source"]["fields"]["project"] es_index_id = es_index_dict[index_name] base_labels = {'project': project, 'es_index_id': es_index_id, 'query_condition': query_condition.replace(" ", "%20").replace('"', '%22')} add_custom_labels(metric_name, base_labels, count) else: print('%s %d' % (metric_name, count)) except Exception as err: print(f"An error occurred in couting: {err}", file=sys.stderr) if __name__ == '__main__': counting() mpos-posp-service.py: |- #!/usr/bin/env python3 # -- coding: utf-8 -- import os import sys import requests import json es_index_dict = { "mpos-java-prod-*": "d667506f-47c3-42a3-80a6-34c1ff10fa27" } #os.environ['ES_URL'] = "http://elasticsearch-es-http.elastic-system:9200" os.environ['ES_URL'] = "http://d1-es.uenpay.com" os.environ['ES_USER'] = "uenpay" os.environ['ES_PASSWORD'] = "123456" os.environ['DURATION'] = "24h" os.environ['define_description'] = "该模式活动尚未配置, 请联系客服" os.environ['QUERY_CONDITION'] = '"该模式活动尚未配置, 请联系客服"' os.environ['METRIC_NAME'] = "java_error" def add_custom_labels(metric_name, base_labels, count): custom_labels = {} for key, value in os.environ.items(): if key.startswith('define_'): label_key = key.replace('define_', '', 1) custom_labels[label_key] = value all_labels = {**base_labels, **custom_labels} label_parts = [f"{k}=\"{v}\"" for k, v in all_labels.items()] labels_str = ",".join(label_parts) print(f'{metric_name}{{{labels_str}}} {count}') def es_query(es_index_name, query_condition): result = None headers = {'Content-Type': 'application/json'} es_auth = (os.getenv('ES_USER'), os.getenv('ES_PASSWORD')) es_url = f"{os.getenv('ES_URL')}/{es_index_name}/_search" duration = ("now-" + os.getenv('DURATION','15m')) body_template = { "size": 10000, "query": { "bool": { "filter": { "range": { "@timestamp": { "gte": duration } } }, "must": [ { "match_phrase": { "fields.project": "mpos-posp-service" } }, { "query_string": { "query": query_condition } } ] } } } try: r = requests.post(url=es_url, headers=headers, auth=es_auth, json=body_template) if r.status_code == 200: result = r.json() except Exception as err: print(f"An error occurred in es_query: {err}", file=sys.stderr) return result def counting(): query_condition = os.getenv('QUERY_CONDITION') metric_name = os.getenv('METRIC_NAME') for index_name in es_index_dict: try: result = es_query(index_name, query_condition) if result and 'hits' in result.keys(): count = result['hits']['total']['value'] for hit in result['hits']['hits']: if '_source' in hit and 'message' in hit['_source']: project = hit["_source"]["fields"]["project"] es_index_id = es_index_dict[index_name] base_labels = {'project': project, 'es_index_id': es_index_id, 'query_condition': query_condition.replace(" ", "%20").replace('"', '%22')} add_custom_labels(metric_name, base_labels, count) else: print('%s %d' % (metric_name, count)) except Exception as err: print(f"An error occurred in couting: {err}", file=sys.stderr) if __name__ == '__main__': counting() mpos-post-service.py: >- #!/usr/bin/env python3 # -- coding: utf-8 -- import os import sys import requests import json es_index_dict = { "mpos-java-prod-*": "d667506f-47c3-42a3-80a6-34c1ff10fa27" } #os.environ['ES_URL'] = "http://elasticsearch-es-http.elastic-system:9200" os.environ['ES_URL'] = "http://d1-es.uenpay.com" os.environ['ES_USER'] = "uenpay" os.environ['ES_PASSWORD'] = "123456" os.environ['DURATION'] = "15m" os.environ['define_description'] = "活动规则不存在、不可用、该交易不满足该活动规则" os.environ['QUERY_CONDITION'] = '"(响应信息:[活动规则不存在、不可用、该交易不满足该活动规则!])" AND NOT "A148960h"' os.environ['METRIC_NAME'] = "java_error" def add_custom_labels(metric_name, base_labels, count): custom_labels = {} for key, value in os.environ.items(): if key.startswith('define_'): label_key = key.replace('define_', '', 1) custom_labels[label_key] = value all_labels = {**base_labels, **custom_labels} label_parts = [f"{k}=\"{v}\"" for k, v in all_labels.items()] labels_str = ",".join(label_parts) print(f'{metric_name}{{{labels_str}}} {count}') def es_query(es_index_name, query_condition): result = None headers = {'Content-Type': 'application/json'} es_auth = (os.getenv('ES_USER'), os.getenv('ES_PASSWORD')) es_url = f"{os.getenv('ES_URL')}/{es_index_name}/_search" duration = ("now-" + os.getenv('DURATION','15m')) body_template = { "size": 10000, "query": { "bool": { "filter": { "range": { "@timestamp": { "gte": duration } } }, "must": [ { "match_phrase": { "fields.project": "mpos-post-service" } }, { "query_string": { "query": query_condition } } ] } } } try: r = requests.post(url=es_url, headers=headers, auth=es_auth, json=body_template) if r.status_code == 200: result = r.json() except Exception as err: print(f"An error occurred in es_query: {err}", file=sys.stderr) return result def counting(): query_condition = os.getenv('QUERY_CONDITION') metric_name = os.getenv('METRIC_NAME') for index_name in es_index_dict: try: result = es_query(index_name, query_condition) if result and 'hits' in result.keys(): count = result['hits']['total']['value'] for hit in result['hits']['hits']: if '_source' in hit and 'message' in hit['_source']: project = hit["_source"]["fields"]["project"] es_index_id = es_index_dict[index_name] base_labels = {'project': project, 'es_index_id': es_index_id, 'query_condition': query_condition.replace(" ", "%20").replace('"', '%22')} add_custom_labels(metric_name, base_labels, count) else: print('%s %d' % (metric_name, count)) except Exception as err: print(f"An error occurred in couting: {err}", file=sys.stderr) if __name__ == '__main__': counting() sql_timeout-prod.py: >- #!/usr/bin/env python3 # -- coding: utf-8 -- import os import sys import requests import json es_index_dict = { "mpos-java-prod-*": "d667506f-47c3-42a3-80a6-34c1ff10fa27", "sxzs-java-prod-*": "ef162b8f-7e7b-4bd9-b514-88ef312935b9" } #os.environ['ES_URL'] = "http://elasticsearch-es-http.elastic-system:9200" os.environ['ES_URL'] = "http://d1-es.uenpay.com" os.environ['ES_USER'] = "uenpay" os.environ['ES_PASSWORD'] = "123456" os.environ['DURATION'] = "15m" os.environ['define_description'] = "sql连接异常" os.environ['QUERY_CONDITION'] = '(mybatis OR "but found") AND (level : ERROR) AND NOT "ORA-01013"' os.environ['METRIC_NAME'] = "java_error" def add_custom_labels(metric_name, base_labels, count): custom_labels = {} for key, value in os.environ.items(): if key.startswith('define_'): label_key = key.replace('define_', '', 1) custom_labels[label_key] = value all_labels = {**base_labels, **custom_labels} label_parts = [f"{k}=\"{v}\"" for k, v in all_labels.items()] labels_str = ",".join(label_parts) print(f'{metric_name}{{{labels_str}}} {count}') def es_query(es_index_name, query_condition): result = None headers = {'Content-Type': 'application/json'} es_auth = (os.getenv('ES_USER'), os.getenv('ES_PASSWORD')) es_url = f"{os.getenv('ES_URL')}/{es_index_name}/_search" duration = ("now-" + os.getenv('DURATION','15m')) body_template = { "size": 10000, "query": { "bool": { "filter": { "range": { "@timestamp": { "gte": duration } } }, "must": [ { "query_string": { "query": query_condition } } ] } } } try: r = requests.post(url=es_url, headers=headers, auth=es_auth, json=body_template) if r.status_code == 200: result = r.json() except Exception as err: print(f"An error occurred in es_query: {err}", file=sys.stderr) return result def counting(): query_condition = os.getenv('QUERY_CONDITION') metric_name = os.getenv('METRIC_NAME') for index_name in es_index_dict: try: result = es_query(index_name, query_condition) if result and 'hits' in result.keys(): count = result['hits']['total']['value'] for hit in result['hits']['hits']: if '_source' in hit and 'message' in hit['_source']: project = hit["_source"]["fields"]["project"] es_index_id = es_index_dict[index_name] base_labels = {'project': project, 'es_index_id': es_index_id, 'query_condition': query_condition.replace(" ", "%20").replace('"', '%22')} add_custom_labels(metric_name, base_labels, count) else: print('%s %d' % (metric_name, count)) except Exception as err: print(f"An error occurred in couting: {err}", file=sys.stderr) if __name__ == '__main__': counting() upload_file.py: >- #!/usr/bin/env python3 # -- coding: utf-8 -- import os import sys import requests import json es_index_dict = { "mpos-java-prod-*": "d667506f-47c3-42a3-80a6-34c1ff10fa27" } #os.environ['ES_URL'] = "http://elasticsearch-es-http.elastic-system:9200" os.environ['ES_URL'] = "http://d1-es.uenpay.com" os.environ['ES_USER'] = "uenpay" os.environ['ES_PASSWORD'] = "123456" os.environ['DURATION'] = "15m" os.environ['define_description'] = "uploadOcrImage请求参数file为空" os.environ['QUERY_CONDITION'] = "\"uploadOcrImage 请求参数\" AND NOT \"{\\\"file\\\":\\\"/9j\\\"}\" AND NOT \"{\\\"shopId\\\"}\"" os.environ['METRIC_NAME'] = "java_error" def add_custom_labels(metric_name, base_labels, count): custom_labels = {} for key, value in os.environ.items(): if key.startswith('define_'): label_key = key.replace('define_', '', 1) custom_labels[label_key] = value all_labels = {**base_labels, **custom_labels} label_parts = [f"{k}=\"{v}\"" for k, v in all_labels.items()] labels_str = ",".join(label_parts) print(f'{metric_name}{{{labels_str}}} {count}') def es_query(es_index_name, query_condition): result = None headers = {'Content-Type': 'application/json'} es_auth = (os.getenv('ES_USER'), os.getenv('ES_PASSWORD')) es_url = f"{os.getenv('ES_URL')}/{es_index_name}/_search" duration = ("now-" + os.getenv('DURATION','15m')) body_template = { "size": 10000, "query": { "bool": { "filter": { "range": { "@timestamp": { "gte": duration } } }, "must": [ { "query_string": { "query": query_condition } } ] } } } try: r = requests.post(url=es_url, headers=headers, auth=es_auth, json=body_template) if r.status_code == 200: result = r.json() except Exception as err: print(f"An error occurred in es_query: {err}", file=sys.stderr) return result def counting(): query_condition = os.getenv('QUERY_CONDITION') metric_name = os.getenv('METRIC_NAME') for index_name in es_index_dict: try: result = es_query(index_name, query_condition) if result and 'hits' in result.keys(): count = result['hits']['total']['value'] for hit in result['hits']['hits']: if '_source' in hit and 'message' in hit['_source']: project = hit["_source"]["fields"]["project"] es_index_id = es_index_dict[index_name] base_labels = {'project': project, 'es_index_id': es_index_id, 'query_condition': query_condition.replace(" ", "%20").replace('"', '%22').replace('\\', '%5C')} add_custom_labels(metric_name, base_labels, count) else: print('%s %d' % (metric_name, count)) except Exception as err: print(f"An error occurred in couting: {err}", file=sys.stderr) if __name__ == '__main__': counting() xxl-job-error.py: |- #!/usr/bin/env python3 # -- coding: utf-8 -- import os import sys import requests import json es_index_dict = { "mpos-java-prod-*": "d667506f-47c3-42a3-80a6-34c1ff10fa27" } #os.environ['ES_URL'] = "http://elasticsearch-es-http.elastic-system:9200" os.environ['ES_URL'] = "http://d1-es.uenpay.com" os.environ['ES_USER'] = "uenpay" os.environ['ES_PASSWORD'] = "123456" os.environ['DURATION'] = "15m" os.environ['define_description'] = "xxl-job-admin执行异常" os.environ['QUERY_CONDITION'] = "\"xxl-job, invoke error\"" os.environ['METRIC_NAME'] = "java_error" def add_custom_labels(metric_name, base_labels, count): custom_labels = {} for key, value in os.environ.items(): if key.startswith('define_'): label_key = key.replace('define_', '', 1) custom_labels[label_key] = value all_labels = {**base_labels, **custom_labels} label_parts = [f"{k}=\"{v}\"" for k, v in all_labels.items()] labels_str = ",".join(label_parts) print(f'{metric_name}{{{labels_str}}} {count}') def es_query(es_index_name, query_condition): result = None headers = {'Content-Type': 'application/json'} es_auth = (os.getenv('ES_USER'), os.getenv('ES_PASSWORD')) es_url = f"{os.getenv('ES_URL')}/{es_index_name}/_search" duration = ("now-" + os.getenv('DURATION','15m')) body_template = { "size": 10000, "query": { "bool": { "filter": { "range": { "@timestamp": { "gte": duration } } }, "must": [ { "match_phrase": { "fields.project": "xxl-job-admin" } }, { "query_string": { "query": query_condition } } ] } } } try: r = requests.post(url=es_url, headers=headers, auth=es_auth, json=body_template) if r.status_code == 200: result = r.json() except Exception as err: print(f"An error occurred in es_query: {err}", file=sys.stderr) return result def counting(): query_condition = os.getenv('QUERY_CONDITION') metric_name = os.getenv('METRIC_NAME') for index_name in es_index_dict: try: result = es_query(index_name, query_condition) if result and 'hits' in result.keys(): count = result['hits']['total']['value'] for hit in result['hits']['hits']: if '_source' in hit and 'message' in hit['_source']: project = hit["_source"]["fields"]["project"] es_index_id = es_index_dict[index_name] base_labels = {'project': project, 'es_index_id': es_index_id, 'query_condition': query_condition.replace(" ", "%20").replace('"', '%22')} add_custom_labels(metric_name, base_labels, count) else: print('%s %d' % (metric_name, count)) except Exception as err: print(f"An error occurred in couting: {err}", file=sys.stderr) if __name__ == '__main__': counting() kind: ConfigMap metadata: name: script-monitor2-file namespace: monitoring