解锁日志分析新姿势:n8n 工作流 + ES 日志 + AI,数据洞察一键 get




01

前言


运维同学基本都接触过日志系统,最熟悉的应该就是代表性的ELK日志系统,作为日志查询的利器,我想大多数人也只有在排查问题时,才会登陆日志系统去搜索错误日志,平时肯定也懒得主动去看,去分析系统有哪些潜在的风险提示。实际看上去风平浪静,实则暗流涌动,结合上篇文章介绍的n8n工作流编排工具,我想着再把ES日志接入AI,来分析下,想看看,在平时注意不到的地方,到底还有什么隐藏故障,如下是运行后的效果图:

解锁日志分析新姿势:n8n 工作流 + ES 日志 + AI,数据洞察一键 get

                 

结果还真是发现了不少问题,这些报错,平时都没有注意过,虽然有些不影响服务使用,有些是系统不在维护,没人使用所以没人报障,看到这里,你还认为自己维护的系统是一直很稳定吗?赶快将你的日志系统接入AI进行扫描分析吧,参考工作流配置如下:

解锁日志分析新姿势:n8n 工作流 + ES 日志 + AI,数据洞察一键 get

02

工作流节点拆解及日志降噪

开头节点是定时器,定义每小时执行1次,即每小时查询es最新1小内的日志,这个很简单,不用多说。

节点二是运行一小段代码,用来生成当天的日期格式,因为我们的日志索引都是名称+日期的,如:nginx-access_2025.07.30,需要将这个日期与第三个节点es的插件搭配使用

from datetime import datetime# 获取输入的timestampinput_data = _input.first()timestamp = input_data.json["timestamp"]# 解析timestamp并格式化date_obj = datetime.fromisoformat(timestamp.replace('Z', '+00:00'))formatted_date = date_obj.strftime("%Y.%m.%d")# 只返回格式化后的日期return [{"json": {"date": formatted_date}}]

节点三是elasticsearch插件,主要用来连接es,配置es索引,及查询条件过滤

解锁日志分析新姿势:n8n 工作流 + ES 日志 + AI,数据洞察一键 get


节点四是将查询的结果整合到一个字段,但也可以选择不整合,原因是刚发现Agent节点支持批量处理输入的数据,之前没注意,如果不合并结果,Agent节点便会每条数据单独循环处理,达不到上下文分析的效果。

# n8n大模型字符串准备器# 将清理后的消息数组转换为大模型可用的字符串格式def clean_string(text):    """清理字符串中的异常引号和空字符串"""    if not text:        return None        # 转换为字符串    text = str(text)        # 处理空字符串    if text.strip() == "":        return None        # 处理只有引号的字符串    if text.strip() in ['""', "''", '`', '``']:        return None        # 处理转义的双引号    text = text.replace('\"', '"')        # 处理连续的双引号    text = text.replace('""', '"')        # 处理开头和结尾的引号    text = text.strip('"')    text = text.strip("'")    text = text.strip('`')        # 处理转义字符    text = text.replace('\n', 'n')    text = text.replace('\t', 't')    text = text.replace('\r', 'r')        # 最终检查是否为空    cleaned_text = text.strip()    if not cleaned_text:        return None        return cleaned_text# 主处理逻辑cleaned_messages = []for item in _input.all():    # 获取当前项的数据    data = item.get("json", {})        # 提取message字段    message = data.get("message", "")        # 清理字符串    cleaned_message = clean_string(message)        # 只添加非空的消息    if cleaned_message is not None:        cleaned_messages.append(cleaned_message)# 将数组转换为字符串if cleaned_messages:    # 用换行符连接所有消息,并添加分隔符    msg_string = "n---n".join(cleaned_messages)else:    msg_string = "无有效日志数据"# 返回结果msg = {    "msg": msg_string,  # 字符串格式,适合大模型    "count": len(cleaned_messages),    "cleaned": True,    "format": "string_for_ai"}# 在n8n中,最后一行会自动返回return msg

节点五便是整个工作流的大脑AI Agent,这里主要说下如何配置数据批处理模式

解锁日志分析新姿势:n8n 工作流 + ES 日志 + AI,数据洞察一键 get

Max Iterations(最大迭代次数),作用:设置进程或算法运行的最大次数。

Return Intermediate Steps(返回中间步骤)

Batch Processing(批处理),定义每个批次处理的样本数量

Delay Between Batches(批次间延迟),设置一个批次完成后到下一个批次开始之间的暂停时间,单位是毫秒

另外附上提示词内容

- Role: 运维资深工程师- Background: 用户需要通过分析Elasticsearch(ES)日志内容来评估系统及服务的运行状况,提前发现潜在问题并采取预防措施。ES日志包含了丰富的系统运行信息,通过对这些日志的分析,可以及时发现异常、性能瓶颈、错误趋势等问题,从而保障系统的稳定运行。- Profile: 你是一位经验丰富的运维资深工程师,精通Elasticsearch日志分析,能够从海量日志数据中提取关键信息,识别潜在问题,并提出有效的预防措施。- Skills: 日志分析、异常检测、性能评估、趋势分析、预防性维护- Goals:   1. 从ES日志中提取关键信息,包括系统运行状态、错误信息、性能指标等。  2. 分析日志内容,识别潜在问题,如异常频繁出现、性能下降、资源瓶颈等。  3. 提供详细的系统及服务运行情况报告,包括问题描述、影响范围、建议措施等。  4. 提出预防性维护建议,帮助用户提前采取措施,避免问题恶化。  5. 以markdown语法用表格形式展示关键问题和建议,需要兼容邮件html格式。  6. 只输出结果,不要添加额外的描述。  7. 务必确保分析结果的准确性和实用性。- Constrains: 分析应基于ES日志内容,重点关注系统运行的异常和性能问题,提出的建议应具有可操作性。排除特定关键词(如`test-ok13`、`test-onr2`、`mysql`相关的内容,以及`BIRD is not ready: i/o timeout`)的日志条目。- OutputFormat: 系统及服务运行情况报告,包括问题描述、影响范围、建议措施等。- Workflow:  1. 收集并解析ES日志内容,提取关键信息。  2. 分析日志数据,识别潜在问题和异常模式。  3. 评估问题的影响范围和严重程度。  4. 提出针对性的预防性维护建议。  5. 以markdown语法用表格形式展示关键问题和建议,需要兼容邮件html格式。  6. 如果输入的日志数据为空,则直接回复"无日志信息,系统运行正常"。- Examples:  - 例子1:输入ES日志内容    ```json    [      {"timestamp": "2024-06-01T10:00:00Z", "level": "ERROR", "message": "Failed to connect to database", "service": "webapp", "host": "host1"},      {"timestamp": "2024-06-01T10:05:00Z", "level": "WARN", "message": "High memory usage detected", "service": "backend", "host": "host2"},      {"timestamp": "2024-06-01T10:10:00Z", "level": "INFO", "message": "System started", "service": "webapp", "host": "host1"},      {"timestamp": "2024-06-01T10:15:00Z", "level": "ERROR", "message": "Failed to connect to database", "service": "webapp", "host": "host1"}    ]    ```    输出结果    # 系统日志AI分析报告nn    ```markdown    | 主机名 | 问题描述                     | 关键性日志内容           | 影响范围       | 建议措施                     |    |--------|------------------------------|----------------------------------|----------------|------------------------------|    | host1  | 数据库连接失败               | Failed to connect to database   | webapp服务     | 检查数据库服务状态和网络连接 |    | host2  | 高内存使用                   | High memory usage detected      | backend服务    | 监控内存使用情况,优化应用   |    ```    总结性分析    ```    本次日志分析发现2个潜在问题,建议立即采取措施以避免影响系统稳定性。    ```  - 例子2:输入ES日志内容    ```json    [      {"timestamp": "2024-06-01T10:00:00Z", "level": "INFO", "message": "System started", "service": "webapp", "host": "host1"},      {"timestamp": "2024-06-01T10:05:00Z", "level": "INFO", "message": "System running normally", "service": "backend", "host": "host2"}    ]    ```    输出结果    ```markdown    | 主机名 | 问题描述                     | 关键性日志内容           | 影响范围       | 建议措施                     |    ```    总结性分析    ```    无日志信息,系统运行正常。    ```

整个工作流内容基本结束了,这是一个很简单很基础的demo样例,看到这,你可能会有疑问,哪怕1小时es的日志量也有成千上万行,这么多日志一下子都投喂给大模型,消耗的token很大,成本有点高,而且日志里不一定都是有用的日志,这么一股脑的都扔进去有点太low了,是的,说的很对,首先,我需要说明下,上面的例子是针对系统message日志进行采样分析,而不是业务日志,message日志量本身不大,而且大部分应用组件报错都会输出到message日志,所以针对运维来说,用message日志分析应用组件是个比较好的切入口,另外,刚开始,大家应该不知道系统日志里到底都有什么,哪些该过滤,哪些该保留,所以,刚开始不妨大胆些,先投喂AI看输出结果,再进行筛选,这样虽然不知道应该保留哪些日志给AI,但起码知道,应该去掉那些日志不输入给AI。如果上面的例子,算是1.0版本,那么请看下面的2.0版本。

解锁日志分析新姿势:n8n 工作流 + ES 日志 + AI,数据洞察一键 get

新增了一个节点,用来筛除es不必要日志,想屏蔽那些日志,把关键字或词语都填进去即可,然后es节点查询语句引用前面的过滤条件

"must_not": [        {          "terms": {            "message": {{ $json.message }}          }        }      ]

有了2.0版本,还有3.0版本,如果环境比较多,应用组件种类也多,比如k8s相关组件日志是一组,db数据库组件日志又是一组,基础架构组件还是一组,怎么分类呢,如下

解锁日志分析新姿势:n8n 工作流 + ES 日志 + AI,数据洞察一键 get


解锁日志分析新姿势:n8n 工作流 + ES 日志 + AI,数据洞察一键 get

解锁日志分析新姿势:n8n 工作流 + ES 日志 + AI,数据洞察一键 get
结语
解锁日志分析新姿势:n8n 工作流 + ES 日志 + AI,数据洞察一键 get

当然,实现方式不止一种,n8n丰富的插件也不止这些功能和应用场景,感兴趣的小伙伴,可以私信交流使用场景及优化建议,期待将AI应用到实际运维工作中,改变传统运维模式,解放双手,提高效率!

前沿技术新闻资讯

上下文管理:从Agent失效到高效运行的完整指南

2025-7-31 7:49:39

前沿技术新闻资讯

国内企业开发的农业AI大模型有哪些?

2025-7-31 9:58:21

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
购物车
优惠劵
搜索