冯宝永 發表於 2023-9-25 00:00:00

ELK logstash 结构(22nd)

<p>在命令行中指定-e参数,从标准输入到标准输出,并格式化结果。</p><pre class="brush:bash;toolbar:false"># /opt/logstash/bin/logstash -e 'input{stdin{}}output{stdout{codec=&gt;rubydebug}}'
www.ttlsa.com
Settings: Default filter workers: 2
Logstash startup completed
{
       "message" =&gt; "www.ttlsa.com",
      "@version" =&gt; "1",
    "@timestamp" =&gt; "2015-12-07T06:57:01.981Z",
          "host" =&gt; "localhost"
}</pre><p>logstash会给事件添加一些额外的信息,如@timestamp,标注事件发生的时间。host标注事件发生的主机。此外,还可能有下面几个信息:</p>
<p>type:标记事件的唯一类型</p>
<p>tags:标记事件某方面属性,可以有多个标签。</p>
<p>每个事件就是一个ruby对象,可以随意的给事件添加或者删除字段。每个logstash过滤插件,都会有四个方法add_tag,remove_tag,add_field, remove_field,它们在过滤匹配成功时生效。</p>
<p>logstash管道必须要有input和output元素,filter元素是可选的。input插件定义数据来源,filter插件用来修改用户指定的数据,output插件定义数据写入何地。</p>
<p>logstash结构如下所示:</p>
<p><img title="ELK logstash 结构(22nd)" class="alignnone wp-image-10829" src="https://zhuji.jb51.net/uploads/img/20230519/0924559cdd62070434fca5c9756f6d72.jpg" width="670" height="266"></p>
<p>下面是一个配置管道:</p><pre class="brush:bash;toolbar:false"># The # character at the beginning of a line indicates a comment. Use
# comments to describe your configuration.
input {
}
# The filter part of this file is commented out to indicate that it is
# optional.
# filter {
#
# }
output {
}</pre><p>在现实情况下,数据来源可能有多个,以及将数据写入到不同的目的地。logstash管道可以使用多个input和output来处理这些需求。</p>
<p>下面的例子从Twitter feed和Filebeat input,将信息发送到elasticsearch集群和直接写入到文件。</p><pre class="brush:bash;toolbar:false">input {
    twitter {
      consumer_key =&gt;
      consumer_secret =&gt;
      keywords =&gt;
      oauth_token =&gt;
      oauth_token_secret =&gt;
    }
    beats {
      port =&gt; "5043"
      ssl =&gt; true
      ssl_certificate =&gt; "/path/to/ssl-cert"
      ssl_key =&gt; "/path/to/ssl-key"
    }
}
output {
    elasticsearch {
      hosts =&gt; ["IP Address 1:port1", "IP Address 2:port2", "IP Address 3"]
    }
    file {
      path =&gt; /path/to/target/file
    }
}</pre><p>Filebeat debug信息:</p><pre class="brush:bash;toolbar:false"># filebeat -d 'publish' -e
2015/12/07 07:46:12.170451 publish.go:100: DBGPublish: {
"@timestamp": "2015-12-07T07:46:09.670Z",
"beat": {
    "hostname": "elk.ttlsa.com",
    "name": "elk.ttlsa.com"
},
"count": 1,
"fields": null,
"input_type": "log",
"message": "218.28.24.98 - - \"POST /www.ttlsa.com HTTP/1.0\" 200 0.139 0.141 3890 \"-\" \"Apache-HttpClient/UNAVAILABLE (java 1.4)\" \"\" \"\" http 127.0.0.1:9000",
"offset": 12145391,
"source": "/data/logs/nginx/www.ttlsa.com-access.log",
"type": "nginx"
}</pre><p>停止logstash服务的失效检测</p>
<p>正常关闭logstash服务的步骤如下:</p>
<ul>
<li>关闭所有的input、filter和output插件</li>
<li>处理完正在处理的事件</li>
<li>中止logstash进程</li>
</ul>
<p>下列因素影响关闭过程:</p>
<ul>
<li>input插件缓慢的接收数据</li>
<li>缓慢的filter</li>
<li>output插件断开连接等待重连</li>
</ul>
<p>这些情况使成功关闭logstash的服务不可预知。</p>
<p>logstash具有分析管道行为和插件停止的失效检测机制。这种机制周期性的产生有关内部事件队列和一系列繁忙工作线程的信息。</p>
<p>为了强制logstash停止,可以在启动时加上--allow-unsafe-shutdown参数。不过不推荐使用,以免丢失数据。</p>
頁: [1]
查看完整版本: ELK logstash 结构(22nd)