logstash killed 解决 dmesg

本文记录了一次在云服务器上使用Logstash进行ES数据同步时遇到的OOM溢出问题,通过dmesg命令检查并调整内存占用,最终解决了问题。

背景:在云服务器上,使用logstash进行两个es之间的数据同步,刚开始同步不到半分钟(很短的时间),然后就提示

[2019-02-27T15:09:38,036][INFO ][logstash.pipeline        ] Pipeline started successfully {:pipeline_id=>"main", :thread=>"#<Thread:0x1306ccff sleep>"}
[2019-02-27T15:09:38,369][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2019-02-27T15:09:41,835][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}
Killed

以前是需要经过很长时间才会结束,现在是直接运行很短时间,就结束了,而且显示了 killed。同步到的数据量,很少。猜测是OOM溢出。

使用dmesg | more命令查看具体信息,然后按enter看向下内容,或者ctrl + F 向下滚动一屏。
‘more’。 ‘tail’, ‘less ’或者‘grep’文字处理工具来处理‘dmesg’命令的输出。由于dmesg日志的输出不适合在一页中完全显示,因此我们使用管道(pipe)将其输出送到more或者less命令单页显示。

dmesg | head -20
dmesg | tail -20

最终发现,的确是OOM了。
在这里插入图片描述

htop命令查看后,总共3.7G内存,已用了2.8G,可用内存较少。kill掉一些占内存较大的进程,然后重新执行logstash命令,正常了,之后数据量也能核对一致。

[2019-02-27T18:54:21,971][INFO ][logstash.pipeline        ] Pipeline started successfully {:pipeline_id=>"main", :thread=>"#<Thread:0x1152ebe2 run>"}
[2019-02-27T18:54:22,103][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2019-02-27T18:54:22,645][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}
[2019-02-27T19:24:02,937][INFO ][logstash.pipeline        ] Pipeline has terminated {:pipeline_id=>"main", :thread=>"#<Thread:0x1152ebe2 run>"}

参考:
dmesg七种用法

要使用Logstash的Grok插件来解决数据真实时间的问题,你可以按照以下步骤操作: 1. 在Logstash的配置文件中,添加一个输入插件来读取你的数据源,例如文件或消息队列。 2. 使用Grok插件来解析你的数据。Grok插件使用正则表达式模式来匹配和提取数据中的特定字段。 3. 对于包含时间戳的字段,你可以使用Grok插件中的日期模式来解析和提取时间信息。日期模式使用特定的格式字符串来匹配和解析时间戳。 4. 在Grok模式中,你可以使用特殊的时间戳标记,如%{TIMESTAMP_ISO8601},来匹配ISO 8601格式的时间戳。如果你的时间戳格式与ISO 8601不同,你可以自定义日期模式来匹配你的时间戳格式。 5. 在Logstash配置中,使用date过滤器将匹配到的时间戳字段转换为Logstash事件的真实时间。你可以指定输入字段和输出字段的名称,并使用合适的格式字符串来定义输出时间的格式。 下面是一个简单的Logstash配置示例,演示了如何使用Grok插件解析时间戳字段: ``` input { file { path => "/path/to/your/logfile" start_position => "beginning" } } filter { grok { match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{GREEDYDATA:message}" } } date { match => [ "timestamp", "yyyy-MM-dd HH:mm:ss" ] target => "@timestamp" } } output { stdout { codec => rubydebug } } ``` 在这个示例中,输入插件从指定的日志文件中读取数据。Grok插件匹配时间戳字段和消息字段,并将它们提取为单独的字段。然后,date过滤器将匹配到的时间戳字段转换为Logstash事件的真实时间,并存储在@timestamp字段中。最后,输出插件将事件打印到控制台。 请注意,这只是一个简单的示例,你可能需要根据你的实际需求进行调整和扩展。你可以根据Logstash文档中提供的更多详细信息来定制你的配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值