国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

提高錯誤日志處理效率!使用Python和釘釘機(jī)器人實現(xiàn)自動告警聚合

這篇具有很好參考價值的文章主要介紹了提高錯誤日志處理效率!使用Python和釘釘機(jī)器人實現(xiàn)自動告警聚合。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1、背景

日志是非常重要的信息資源。它們記錄了應(yīng)用程序的運(yùn)行狀態(tài)、錯誤和異常情況,幫助我們了解系統(tǒng)的健康狀況以及發(fā)現(xiàn)潛在的問題。為了高效地管理和分析日志數(shù)據(jù),許多組織采用了Elasticsearch、Logstash和Kibana(ELK)堆棧作為日志收集和分析的解決方案。

開發(fā)一個實時監(jiān)控和告警腳本,專門用于監(jiān)控ELK平臺中的錯誤日志,并及時發(fā)送告警通知給相關(guān)人員。該系統(tǒng)將通過掃描Elasticsearch中的日志數(shù)據(jù),篩選出等級為ERROR的錯誤日志,并根據(jù)預(yù)設(shè)的告警規(guī)則進(jìn)行處理。

2、目的

使用Python從Elasticsearch中查詢特定級別為ERROR的錯誤日志,并通過釘釘機(jī)器人實現(xiàn)告警聚合和發(fā)送,以提高錯誤日志的處理效率和及時響應(yīng)能力。

為什么開發(fā)這個腳本?
因為目前我們這邊沒有監(jiān)控日志的信息,出現(xiàn)問題不能及時發(fā)現(xiàn) 和預(yù)知
優(yōu)勢
1、消息進(jìn)行聚合,每個項目的多條告警信息,匯總一條發(fā)送。突破釘釘機(jī)器人每分鐘只能發(fā)送20條的限制
2、告警信息you太多的重復(fù),進(jìn)行去重處理,添加告警次數(shù)發(fā)送。防止被釘釘限流
提高錯誤日志處理效率!使用Python和釘釘機(jī)器人實現(xiàn)自動告警聚合

3、原理

  1. 使用Python的Elasticsearch庫連接到Elasticsearch集群。
  2. 構(gòu)建Elasticsearch查詢DSL(領(lǐng)域?qū)S谜Z言),過濾出級別為ERROR的日志記錄。
  3. 執(zhí)行查詢并獲取結(jié)果。
  4. 對查詢結(jié)果進(jìn)行聚合,統(tǒng)計每個項目的錯誤次數(shù)。
  5. 根據(jù)聚合結(jié)果,生成告警消息的Markdown格式內(nèi)容。
  6. 使用釘釘機(jī)器人發(fā)送告警消息到指定的釘釘群。

4、流程

  1. 導(dǎo)入必要的Python庫,包括elasticsearchrequests。
  2. 創(chuàng)建Elasticsearch連接,指定Elasticsearch集群的主機(jī)和端口。
  3. 構(gòu)建Elasticsearch查詢DSL,設(shè)置查詢條件為日志級別為ERROR。
  4. 執(zhí)行查詢,獲取查詢結(jié)果。
  5. 對查詢結(jié)果進(jìn)行處理,聚合每個項目的錯誤次數(shù)。
  6. 根據(jù)聚合結(jié)果生成告警消息的Markdown內(nèi)容。
  7. 使用釘釘機(jī)器人API發(fā)送告警消息到指定的釘釘群。

5、實現(xiàn)代碼

提高錯誤日志處理效率!使用Python和釘釘機(jī)器人實現(xiàn)自動告警聚合


# -*- coding: utf-8 -*-
# @Time    : 2023/6/17 18:11
# @Author  : 南宮乘風(fēng)
# @Email   : 1794748404@qq.com
# @File    : all_es.py
# @Software: PyCharm
from collections import Counter
from datetime import datetime, timedelta

import requests
from elasticsearch import Elasticsearch

from monitor.es_ding import send_pretty_message

# Elasticsearch客戶端實例
es = Elasticsearch(hosts=['http://172.18.xxx.xxxx:9200'], http_auth=('elastic', 'xxxxx'),
                   sniff_on_start=True,  # 連接前測試
                   sniff_on_connection_fail=True,  # 節(jié)點無響應(yīng)時刷新節(jié)點
                   sniff_timeout=300,  # 設(shè)置超時時間
                   headers={'Content-Type': 'application/json'})


def format_timestamp(timestamp):
    """格式化時間為Elasticsearch接受的字符串格式"""
    return timestamp.strftime("%Y-%m-%d %H:%M:%S")


def search_errors():
    """執(zhí)行查詢,獲取錯誤日志數(shù)據(jù)"""
    current_time = datetime.now()
    one_minute_ago = current_time - timedelta(minutes=10)
    current_time_str = format_timestamp(current_time)
    one_minute_ago_str = format_timestamp(one_minute_ago)

    index = 'app-prod-*'  # 替換為實際的索引名稱

    query = {
        "query": {
            "bool": {
                "filter": [
                    {
                        "range": {
                            "@timestamp": {
                                "gte": one_minute_ago_str,
                                "lt": current_time_str,
                                "format": "yyyy-MM-dd HH:mm:ss",
                                "time_zone": "+08:00"
                            }
                        }
                    },
                    {
                        "match": {
                            "loglevel": "ERROR" #匹配項目錯誤等級
                        }
                    },
                    {
                        "bool": {
                            "must_not": [
                                {
                                    "match": {
                                        "projectname": "fox-data-spiderman" # 需要屏蔽的項目
                                    }
                                }
                            ]
                        }
                    }
                ]
            }
        },
        "_source": [  ## 輸出的字段
            "date",
            "projectname",
            "threadname",
            "msg"
        ],
        "from": 0,
        "size": 10000, # 返回查詢的條數(shù)
    }

    result = es.search(index=index, body=query)
    total_documents = result["hits"]["total"]["value"]
    print(f"總共匹配到 {total_documents} 條文檔")

    result = result['hits']['hits']
    all_result = []

    for i in result:
        all_result.append(i['_source'])

    msg_counter = Counter(d['msg'] for d in all_result if 'msg' in d)
    results = []

    for d in all_result:
        if 'msg' in d and d['msg'] in msg_counter:
            count = msg_counter[d['msg']]
            del msg_counter[d['msg']]
            d['count'] = count
            d['msg'] = d['msg'][:100] + ('...' if len(d['msg']) > 100 else '')
            results.append(d)

    return results


def aggregate_errors(results):
    """按項目名稱聚合錯誤日志"""
    aggregated_data = {}
    for d in results:
        projectname = d.get('projectname')
        if projectname:
            if projectname not in aggregated_data:
                aggregated_data[projectname] = []
            aggregated_data[projectname].append({'date': d.get('date'), 'msg': d.get('msg'), 'count': d.get('count')})
    return aggregated_data


def generate_summary(projectname, messages):
    """生成Markdown格式的消息摘要"""
    markdown_text = f'### {projectname} \n\n'
    for message in messages:
        markdown_text += f"**時間:** {message['date']}\n\n"
        markdown_text += f"**告警次數(shù):** <font color='red'><b>{message['count']}</b></font>\n\n"
        markdown_text += f"{message['msg']}\n\n---\n\n"
    return markdown_text


def send_message_summary(projectname, messages):
    """發(fā)送摘要消息給釘釘機(jī)器人"""
    summary = generate_summary(projectname, messages)
    data = {
        'msgtype': 'markdown',
        'markdown': {
            'title': f'{projectname}消息告警',
            'text': summary
        }
    }
    webhook_url = 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxx'  # 替換為實際的Webhook URL
    response = requests.post(webhook_url, json=data)
    if response.status_code == 200:
        print('消息發(fā)送成功')
    else:
        print('消息發(fā)送失敗')


if __name__ == '__main__':
    errors = search_errors()
    aggregated_errors = aggregate_errors(errors)

    for projectname, messages in aggregated_errors.items():
        print(f"{projectname}:")
        print(messages)

提高錯誤日志處理效率!使用Python和釘釘機(jī)器人實現(xiàn)自動告警聚合

6、Crontab添加定時任務(wù)

也可以用采用:Jenkins與GitLab的定時任務(wù)工作流程
https://blog.csdn.net/heian_99/article/details/131164591?spm=1001.2014.3001.5501

#日志
*/2 * * * * cd /python_app/elasticsearch; /opt/anaconda3/envs/py38/bin/python -u  es_monitor.py >> es_error_info.log 2>&1

該定時任務(wù)的含義是每隔2分鐘執(zhí)行一次指定目錄下的 es_monitor.py 腳本,并將輸出信息追加到 es_error_info.log 文件中。這樣可以定期監(jiān)控 Elasticsearch 的錯誤日志,并記錄相關(guān)信息以便后續(xù)查看和分析。

7、總結(jié)

本博客,為我們構(gòu)建了一個完整的應(yīng)用日志監(jiān)控和告警系統(tǒng),通過ELK技術(shù)棧和釘釘機(jī)器人的結(jié)合,使得我們能夠及時發(fā)現(xiàn)和處理應(yīng)用中的錯誤,提高了團(tuán)隊的工作效率和系統(tǒng)的穩(wěn)定性。文章來源地址http://www.zghlxwxcb.cn/news/detail-506846.html

到了這里,關(guān)于提高錯誤日志處理效率!使用Python和釘釘機(jī)器人實現(xiàn)自動告警聚合的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 從零開始學(xué)習(xí)Web自動化測試:如何使用Selenium和Python提高效率?

    從零開始學(xué)習(xí)Web自動化測試:如何使用Selenium和Python提高效率?

    目錄 引言: 一、了解Web自動化測試的基本概念 二、選擇Web自動化測試工具 三、學(xué)習(xí)Web自動化測試的技能 四、實踐Web自動化測試 五、總結(jié) 隨著互聯(lián)網(wǎng)的不斷發(fā)展,Web自動化測試越來越受到關(guān)注。Web自動化測試可以幫助我們輕松地檢查網(wǎng)站的功能和性能,提高軟件開發(fā)的效率

    2024年02月01日
    瀏覽(25)
  • 學(xué)會RabbitMQ的延遲隊列,提高消息處理效率

    學(xué)會RabbitMQ的延遲隊列,提高消息處理效率

    手把手教你,本地RabbitMQ服務(wù)搭建(windows) 消息隊列選型——為什么選擇RabbitMQ RabbitMQ靈活運(yùn)用,怎么理解五種消息模型 RabbitMQ 能保證消息可靠性嗎 推或拉? RabbitMQ 消費(fèi)模式該如何選擇 死信是什么,如何運(yùn)用RabbitMQ的死信機(jī)制? 真的好用嗎?鮮有人提的 RabbitMQ-RPC模式 前面

    2024年02月14日
    瀏覽(21)
  • 視頻增強(qiáng)與壓縮:提高視頻處理效率的關(guān)鍵

    視頻處理是現(xiàn)代計算機(jī)視覺和人工智能領(lǐng)域的一個關(guān)鍵技術(shù),它涉及到對視頻數(shù)據(jù)進(jìn)行處理、分析、壓縮和增強(qiáng)等多種操作。隨著互聯(lián)網(wǎng)和移動互聯(lián)網(wǎng)的發(fā)展,視頻數(shù)據(jù)的產(chǎn)生和傳播速度越來越快,這為視頻處理技術(shù)帶來了巨大挑戰(zhàn)。在這篇文章中,我們將深入探討視頻增強(qiáng)

    2024年02月21日
    瀏覽(24)
  • MySQL表操作:提高數(shù)據(jù)處理效率的秘訣(進(jìn)階)(1)

    MySQL表操作:提高數(shù)據(jù)處理效率的秘訣(進(jìn)階)(1)

    ??**“生命不在于相信奇跡,而在于創(chuàng)造奇跡?!薄鞂W(xué)恒**?? ??作者:不能再留遺憾了?? ??專欄:MySQL學(xué)習(xí)?? ??本文章主要內(nèi)容:MySQL對表操作進(jìn)階。數(shù)據(jù)庫約束、表的設(shè)計、新增,后續(xù)會更新進(jìn)階表的查詢?? 前面我們已經(jīng)介紹過初識MySQL以及MySQL對庫和對表操作(

    2024年02月08日
    瀏覽(19)
  • MySQL表操作:提高數(shù)據(jù)處理效率的秘訣(進(jìn)階)(2)

    MySQL表操作:提高數(shù)據(jù)處理效率的秘訣(進(jìn)階)(2)

    ??“學(xué)習(xí)難免有坎坷,重要的是你能盡力而為,持之以恒。”?? ??作者:不能再留遺憾了?? ??專欄:MySQL學(xué)習(xí)?? ??本文章主要內(nèi)容:MySQL表操作進(jìn)階:聚合查詢和聯(lián)合查詢?? 前面我們學(xué)習(xí)了MySQL進(jìn)階的數(shù)據(jù)庫約束、表的設(shè)計和新增,那么今天我將為大家分享MySQL表查詢

    2024年02月08日
    瀏覽(20)
  • 自然語言處理與大數(shù)據(jù):如何提高數(shù)據(jù)分析效率

    自然語言處理(NLP,Natural Language Processing)是計算機(jī)科學(xué)與人工智能領(lǐng)域的一個分支,研究如何讓計算機(jī)理解、生成和處理人類語言。自然語言處理技術(shù)廣泛應(yīng)用于各個領(lǐng)域,包括機(jī)器翻譯、語音識別、情感分析、文本摘要等。 隨著數(shù)據(jù)的大量生成和存儲,大數(shù)據(jù)技術(shù)已經(jīng)成為

    2024年04月09日
    瀏覽(24)
  • 低代碼核心能力表單引擎可以提高業(yè)務(wù)處理效率,降低成本的

    低代碼核心能力表單引擎可以提高業(yè)務(wù)處理效率,降低成本的

    在數(shù)字化時代,企業(yè)面臨著海量的數(shù)據(jù)和復(fù)雜的業(yè)務(wù)需求,對于低代碼表單的需求也逐漸增加,低代碼表單可以提高企業(yè)的業(yè)務(wù)處理效率,還可以降低開發(fā)成本,縮短開發(fā)周期。 低代碼的表單主要用于數(shù)據(jù)采集、流程審批和業(yè)務(wù)運(yùn)營等場景,可以幫助企業(yè)更高效地管理數(shù)據(jù)和

    2024年02月04日
    瀏覽(23)
  • 如何提高傾斜攝影超大場景的三維模型輕量化處理速度和效率?

    如何提高傾斜攝影超大場景的三維模型輕量化處理速度和效率?

    ?傾斜攝影超大場景的三維模型輕量化處理是將高精度的三維模型進(jìn)行降采樣、簡化等處理,以達(dá)到減少數(shù)據(jù)大小和提高渲染性能的目的。為了提高輕量化處理速度,可以從以下方面入手: 1、選擇合適的輕量化算法。當(dāng)前已有很多成熟的三維模型輕量化算法,如基于多分辨率

    2024年02月01日
    瀏覽(32)
  • 三維模型3DTile格式輕量化壓縮處理效率提高的技術(shù)方淺析

    三維模型3DTile格式輕量化壓縮處理效率提高的技術(shù)方淺析

    隨著三維模型在各個領(lǐng)域的廣泛應(yīng)用,對于其格式的輕量化壓縮處理和效率提高的需求也越發(fā)迫切。本文將介紹一些技術(shù)方法,幫助實現(xiàn)三維模型3DTile格式的輕量化壓縮處理并提高處理效率。 首先,針對三維模型的輕量化壓縮處理,我們可以采用以下方法: 1、減少頂點數(shù):

    2024年02月09日
    瀏覽(26)
  • 數(shù)據(jù)建模的云計算支持:利用云計算資源提高數(shù)據(jù)處理效率

    數(shù)據(jù)建模是數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)領(lǐng)域中的一個重要環(huán)節(jié),它涉及到將實際問題轉(zhuǎn)化為數(shù)學(xué)模型的過程。隨著數(shù)據(jù)規(guī)模的不斷擴(kuò)大,傳統(tǒng)的數(shù)據(jù)處理方法已經(jīng)無法滿足需求,因此需要尋找更高效的數(shù)據(jù)處理方法。云計算是一種基于互聯(lián)網(wǎng)的計算資源分配和共享方式,它可以提供

    2024年04月28日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包