现有的答案都无济于事,因此这里有一个新问题。
用例:重定向系统日志(或)监控静态文件。
我已经成功安装了 logstash (1.4.2)、elasticsearch(1.1.1) 和 kibana(3.0.1),但仍遇到错误
No results There were no results because no indices were found that match your selected time span
- 我可以参观http://example.com:9200-> 成功 200 消息
- 参观http://example.com:9200/_aliases?pretty-> {} -> 空字典!
- 同样的,这个 CLI 也可以运行
/opt/logstash/bin/logstash -f </etc/logstash/conf.d/10-syslog.conf>
使用的 logstash 文件示例如下。如果我有其他要求,请告知我。
syslog(监听端口 9000,是的,我添加了“。 @@localhost:9000”
/etc/rsyslog.d/50-default.conf
并重新启动 rsyslog )sudo cat > /etc/logstash/conf.d/10-syslog.conf <<EOF input { tcp { port => 9000 type => syslog } udp { port => 9000 type => syslog } } filter { if [type] == "syslog" { grok { match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" } add_field => [ "received_at", "%{@timestamp}" ] add_field => [ "received_from", "%{host}" ] } syslog_pri { } date { match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } } } output { elasticsearch { host => localhost } stdout { codec => rubydebug } } EOF
静态文件(存在 syslog 类型数据的文件)
input { file { path => "/var/log/awasthi.log" type => syslog start_position => "beginning" sincedb_path => "/dev/null" } } filter { if [type] == "syslog" { grok { match => [ "message", "%{SYSLOGTIMESTAMP} %{NOTSPACE:hostname1}/%{NOTSPACE}"] } } } output { stdout { codec => rubydebug } }
答案1
正如另一篇帖子中提到的:
“我遇到过类似的事情,听起来你还没有设置 ACL 来允许 logstash 用户查看该日志文件。
例如,使用“setfacl -mu:logstash-:rx /var/log”,然后通过编辑 /etc/passwd 并临时为 logstash 用户提供 shell 进行测试。然后,su - logstash,并尝试 cd 或 cat 该文件。如果成功,则数据应出现在您的 Kibana 设置中。
我在 elasticsearch 前面使用 redis,因此我可以通过简单地运行“LLEN”和“LPOP”来测试 logstash 是否正常工作。
答案2
elasticsearch 1.1 的文档不再可用(1.3 或 0.9 可用),并且 ES 的默认网络行为已经改变(从最初监听非环回 IP,到默认监听环回)。
每https://www.elastic.co/guide/en/elasticsearch/reference/1.3/modules-network.html:
network.publish_host 设置允许控制节点将在集群内发布自身以便其他节点能够连接到的主机。当然,这不能是 anyLocalAddress,默认情况下,它将是第一个非环回地址(如果可能)或本地地址。
虽然现在这个问题主要是学术性的,但提问者面临的最可能的问题是由于试图将数据发送到localhost
,而不是example.com
(根据问题的信息,这是已知可行的)。
使用较新的 ES 版本,我怀疑这个问题不会发生(因为 ES 现在默认只监听本地主机)。
答案3
使用 curl localhost:9200/_cat/indices?v 列出所有索引,以确认您的日志已到达 elasticsearch。然后确保在 kibana 中配置的索引模式(我认为是右上角的齿轮图标)与 _cat/indicies 中显示的索引命名模式相匹配(应该在 logstash 配置中设置,但我不再使用 logstash,所以我不确定。我非常喜欢 rsyslog 的 om-elasticsearch 模块而不是 logstash。它更节能。)
还要确保在 kibana 的配置文件中配置的 elasticsearch 路径 100% 可以从本地 Web 浏览器直接复制粘贴访问。如果您说的是 example.com,则最好将 example.com 主机文件添加到正确的服务器。除非您在工作站上安装了 elasticsearch 并连接到主服务器,否则 localhost 根本不起作用...