【问题标题】:Appending to file not showing up on logstash or elasticsearch output附加到未显示在 logstash 或 elasticsearch 输出上的文件
【发布时间】:2018-07-10 01:15:28
【问题描述】:

我使用来自 elastic.co 的图像创建了 logstash 和 elasticsearch docker 容器。当我附加到我设置为输入文件的文件时,我看不到来自 logstash 或 elasticsearch 的任何输出。这个page 并没有太大帮助,也无法在 google 或 stackoverflow 上找到我的确切问题。

这就是我启动容器的方式:

docker run                      \
--name elasticsearch            \
-p 9200:9200                    \
-p 9300:9300                    \
-e "discovery.type=single-node" \
docker.elastic.co/elasticsearch/elasticsearch:6.3.1


docker run \
--name logstash \
--rm -it -v $(pwd)/elk/logstash.yml:/usr/share/logstash/config/logstash.yml \
-v $(pwd)/elk/pipeline.conf:/usr/share/logstash/pipeline/pipeline.conf \
docker.elastic.co/logstash/logstash:6.3.1

这是我的管道配置文件:

input {
  file {
    path => "/pepper/logstash-tutorial.log"
  }
}

output {
  elasticsearch {
    hosts => "http://x.x.x.x:9200/"
  }
  stdout {
    codec => "rubydebug"
  }
}

Logstash 和 elasticsearch 似乎开始正常。 示例 logstash 启动输出:

[INFO ][logstash.inputs.beats    ] Beats inputs: Starting input listener {:address=>"0.0.0.0:5044"}
[INFO ][logstash.pipeline        ] Pipeline started successfully {:pipeline_id=>"main", :thread=>"#<Thread:0x6dc306e7 sleep>"}
[INFO ][logstash.agent           ] Pipelines running {:count=>2, :running_pipelines=>[:main, :".monitoring-logstash"], :non_running_pipelines=>[]}
[INFO ][org.logstash.beats.Server] Starting server on port: 5044
[INFO ][logstash.inputs.metrics  ] Monitoring License OK
[INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}

弹性搜索启动输出示例:

[INFO ][o.e.c.r.a.AllocationService] [FJImg8Z] Cluster health status changed from [YELLOW] to [GREEN] (reason: [shards started [[.monitoring-logstash-6-2018.07.10][0]] ...]).

因此,当我对 logstash-tutorial.log 进行更改时,我看不到来自 logstash 或 elasticsearch 的任何终端输出。如何正确获取输出或配置logstash和elasticsearch?

【问题讨论】:

  • 你最后是怎么解决的。我遇到了同样的问题
  • @user2256235 如果您不使用容器化,您可能会使其工作。我们最终迁移到 AWS 上的 Elasticsearch Service 并使用 Kinesis Firehose 获取日志。少一点努力。 ELK 需要大量设置,但当然 ELK 更便宜。

标签: docker elasticsearch input logstash elastic-stack


【解决方案1】:

答案在您提到的同一页面上。看看start_position

选择 Logstash 开始读取文件的初始位置:开头或结尾。 默认行为将文件视为实时流,因此从末尾开始。如果您有要导入的旧数据,将此设置为开头

设置起始位置如下:

input {
  file {
    path => "/pepper/logstash-tutorial.log"
    start_position => "beginning" 
  }
}

output {
  elasticsearch {
    hosts => "http://x.x.x.x:9200/"
  }
  stdout {
    codec => "rubydebug"
  }
}

【讨论】:

  • 不幸的是,添加start_position =&gt; "beginning" 并没有改变任何东西。我也尝试过等待,因为有时可能会有点慢。我也尝试添加sincedb_path =&gt; "/dev/null",但仍然没有。这可能与它在流浪机器上运行有关。我将尝试在我的 mac 上运行它,看看它是否有效。
  • 它似乎也不适用于 mac。有什么想法吗?
  • 唯一的另一件事是它会无限期地继续读取文件,所以你必须停止logstash进程。另外,尝试刷新弹性并查看数据是否被索引。除此之外,我对系统特定问题一无所知。上面的代码在 Windows 上适用于我。
猜你喜欢
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-28
  • 1970-01-01
相关资源
最近更新 更多