python - 使用 Elasticsearch 获取日志文件

标签 python elasticsearch elasticsearch-dsl elasticsearch-dsl-py

信息:

Filebeat安装在将从中读取日志并将其发送到 Elasticsearch 服务器的计算机上。从测试机,使用elasticsearch-dsl,我正在读取日志并将其写入文件。

问题:

来自机器的原始记录:

[Timestamp][INFO] AAAAAA
[Timestamp][INFO] BBBBBB
[Timestamp][INFO] CCCCCC

搜索并将日志写入输出文件后:
[Timestamp][INFO] CCCCCC
[Timestamp][INFO] AAAAAA
[Timestamp][INFO] BBBBBB

如何保持日志顺序不变或保持原样?

代码:
from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search, Q, Index
import time
#Make Connection
es =  Elasticsearch(["100.16.13.222:9200"])

#Create Index Object
ind = Index("filebeat-*",using=es)
#Clear Cache
ind.clear_cache()
#Create Search object for this index
sear = ind.search()

#Create query
sear =  sear.query("match",host="WIN-LK9FS7568K4").query("match",tags="old_log")
res = sear.execute(ignore_cache=True)
print int(res.hits.total)

with open("a.txt","w") as fh:
    for i in sear.scan():
        fh.write(i.message+"\n")

最佳答案

您需要按时间戳对日志进行排序。将您的搜索代码更改为此:

sear =  sear.sort('timestamp')
            .query("match",host="WIN-LK9FS7568K4")
            .query("match",tags="old_log")

当然,您需要更改timestamp以匹配您的时间戳字段。

关于python - 使用 Elasticsearch 获取日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43408635/

相关文章:

python - 如何在 Django 应用程序名称更改后编辑数据库表

Elasticsearch:处理经常更新的文档

elasticsearch - 计算两个日期字段之间差异的平均值

Python Azure 存储表 : query_entities by datetime

python - 未启用时将 QDoubleSpinBox 值设置为空字符串

elasticsearch - 重命名 Elasticsearch 中的字段

elasticsearch - 如何使用 java api elasticsearch 脚本更新多个字段

database - Elasticsearch查询返回所有记录

elasticsearch - Elasticsearch查找所有 'delivered'但不是 'opened'的消息

python - 查找相距很远的最大大小的字符串集