“Elastic Stack”的版本间的差异
(→长期运行) |
(→input) |
||
第104行: | 第104行: | ||
===input=== | ===input=== | ||
+ | |||
+ | 请记住一个原则:Logstash配置一定要有一个input和一个output。在演示过程中,如果没有写明input,默认就会使用"hello world"里我们已经演示过的input/stdin ,同理,没有写明的output就是output/stdout。 | ||
+ | |||
+ | ;标准输入(Stdin) | ||
+ | |||
+ | 我们已经见过好几个示例使用 stdin 了。这也应该是 logstash 里最简单和基础的插件了。 | ||
+ | 所以,在这段中,我们可以学到一些未来每个插件都会有的一些方法。 | ||
+ | 配置示例 | ||
+ | |||
+ | input { | ||
+ | stdin { | ||
+ | add_field => {"key" => "value"} | ||
+ | codec => "plain" | ||
+ | tags => ["add"] | ||
+ | type => "std" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | output { | ||
+ | stdout { | ||
+ | codec=>rubydebug | ||
+ | } | ||
+ | } | ||
+ | |||
+ | { | ||
+ | "@timestamp" => 2017-05-03T07:21:24.631Z, | ||
+ | "@version" => "1", | ||
+ | "host" => "elk", | ||
+ | "message" => "hello world", | ||
+ | "type" => "std", | ||
+ | "key" => "value", | ||
+ | "tags" => [ | ||
+ | [0] "add" | ||
+ | ] | ||
+ | } | ||
+ | |||
+ | ;读取文件(File) | ||
+ | |||
+ | input { | ||
+ | file { | ||
+ | path => ["/var/log/apache2/*.log"] | ||
+ | type => "system" | ||
+ | start_position => "beginning" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | output { | ||
+ | stdout { | ||
+ | codec=>rubydebug | ||
+ | } | ||
+ | } | ||
+ | |||
+ | { | ||
+ | "path" => "/var/log/apache2/access.log", | ||
+ | "@timestamp" => 2017-05-03T07:28:04.825Z, | ||
+ | "@version" => "1", | ||
+ | "host" => "elk", | ||
+ | "message" => "192.168.10.1 - - [03/May/2017:15:28:04 +0800] \"GET / HTTP/1.1\" 200 3524 \"-\" \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\"", | ||
+ | "type" => "system" | ||
+ | } | ||
+ | |||
+ | |||
+ | ;解释 | ||
+ | |||
+ | <source lang="bash"> | ||
+ | discover_interval #logstash每隔多久去检查一次被监听的path下是否有新文件。默认值是15秒。 | ||
+ | exclude #不想被监听的文件可以排除出去。 | ||
+ | close_older #一个已经监听中的文件,如果超过这个值的时间内没有更新内容,就关闭监听它的文件句柄。默认是3600秒,即一小时。 | ||
+ | ignore_older #在每次检查文件列表的时候,如果一个文件的最后修改时间超过这个值,就忽略这个文件。默认是86400秒,即一天。 | ||
+ | stat_interval #logstash每隔多久检查一次被监听文件状态(是否有更新),默认是1秒。 | ||
+ | start_position #logstash从什么位置开始读取文件数据,默认是结束位置。如果你是要导入原有数据,把这个设定改成 "beginning",logstash 进程就从头开始读取。 | ||
+ | </source> | ||
+ | |||
+ | |||
+ | ;注意 | ||
+ | |||
+ | * 通常你要导入原有数据进Elasticsearch的话,你还需要filter/date插件来修改默认的"@timestamp" 字段值。 | ||
+ | * FileWatch只支持文件的绝对路径,而且会不自动递归目录。所以有需要的话,请用数组方式都写明具体哪些文件。 | ||
+ | * 因为windows平台上没有inode的概念,Logstash某些版本在windows平台上监听文件不是很靠谱。windows平台上,推荐考虑使用nxlog作为收集端。 | ||
===codec=== | ===codec=== |
2017年5月3日 (三) 07:46的版本
目录
通用
- 安装java8,java9不兼容。
- ElasticSearch、Kinaba在config里默认是用localhost,指定IP,否则用IP无法访问。
Beats
Logstash
Hello World
# bin/logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}' { "@timestamp" => 2017-05-03T05:34:41.343Z, "@version" => "1", "host" => "elk", "message" => "hello world" }
Logstash会给事件添加一些额外信息。最重要的就是 @timestamp,用来标记事件的发生时间。
此外,大多数时候,还可以见到另外几个:
- host 标记事件发生在哪里。
- type 标记事件的唯一类型。
- tags 标记事件的某方面属性。这是一个数组,一个事件可以有多个标签。
每个logstash过滤插件,都会有四个方法:
- add_tag
- remove_tag
- add_field
- remove_field
配置语法
Logstash社区通常习惯用shipper,broker和indexer来描述数据流中不同进程各自的角色。
不过我见过很多运用场景里都没有用logstash作为shipper,或者说没有用elasticsearch作为数据存储也就是说也没有indexer。所以,我们其实不需要这些概念。只需要学好怎么使用和配置logstash进程,然后把它运用到你的日志管理架构中最合适它的位置就够了。
./logstash -e 'input{stdin{}}output{stdout{}}' 2017-05-03T06:15:51.690Z elk hello world ./logstash -e '' { "@timestamp" => 2017-05-03T06:16:38.373Z, "@version" => "1", "host" => "elk", "message" => "hello world", "type" => "stdin" }
- 命令行参数
bin/logstash -e '' #-e 意即执行。 bin/logstash -f agent.conf #-f 意即文件。 bin/logstash -f /etc/logstash.d/ #读取目录下所有文本文件,然后在自己内存里拼接成一个完整的大配置文件,再去执行。
logstash列出目录下所有文件时,是字母排序的。而logstash配置段的filter和output都是顺序执行,所以顺序非常重要。采用多文件管理的用户,推荐采用数字编号方式命名配置文件。
- 设置文件
从Logstash 5.0开始,新增了$LS_HOME/config/logstash.yml文件,可以将所有的命令行参数都通过YAML文件方式设置。同时为了反映命令行配置参数的层级关系,参数也都改成用.而不是-了。
pipeline: workers: 24 batch: size: 125 delay: 5
plugin的安装
从logstash 1.5.0版本开始,logstash将所有的插件都独立拆分成gem包。这样,每个插件都可以独立更新,不用等待logstash自身做整体更新的时候才能使用了。
为了达到这个目标,logstash配置了专门的plugins管理命令。
bin/logstash-plugin list 查看本机现在有多少插件可用 bin/logstash-plugin install logstash-output-webhdfs 安装插件 bin/logstash-plugin update logstash-input-tcp 更新插件 bin/logstash-plugin install /path/to/logstash-filter-crash.gem 安装本地插件
长期运行
- 标准的service方式 : service logstash start
- 最基础的nohup方式 : nohup command &> /dev/null
- 更优雅的SCREEN方式
- 最推荐的daemontools方式
插件配置
input
请记住一个原则:Logstash配置一定要有一个input和一个output。在演示过程中,如果没有写明input,默认就会使用"hello world"里我们已经演示过的input/stdin ,同理,没有写明的output就是output/stdout。
- 标准输入(Stdin)
我们已经见过好几个示例使用 stdin 了。这也应该是 logstash 里最简单和基础的插件了。 所以,在这段中,我们可以学到一些未来每个插件都会有的一些方法。 配置示例
input {
stdin { add_field => {"key" => "value"} codec => "plain" tags => ["add"] type => "std" }
}
output {
stdout { codec=>rubydebug }
}
{
"@timestamp" => 2017-05-03T07:21:24.631Z, "@version" => "1", "host" => "elk", "message" => "hello world", "type" => "std", "key" => "value", "tags" => [ [0] "add" ]
}
- 读取文件(File)
input {
file { path => ["/var/log/apache2/*.log"] type => "system" start_position => "beginning" }
}
output {
stdout { codec=>rubydebug }
}
{
"path" => "/var/log/apache2/access.log", "@timestamp" => 2017-05-03T07:28:04.825Z, "@version" => "1", "host" => "elk", "message" => "192.168.10.1 - - [03/May/2017:15:28:04 +0800] \"GET / HTTP/1.1\" 200 3524 \"-\" \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\"", "type" => "system"
}
- 解释
discover_interval #logstash每隔多久去检查一次被监听的path下是否有新文件。默认值是15秒。 exclude #不想被监听的文件可以排除出去。 close_older #一个已经监听中的文件,如果超过这个值的时间内没有更新内容,就关闭监听它的文件句柄。默认是3600秒,即一小时。 ignore_older #在每次检查文件列表的时候,如果一个文件的最后修改时间超过这个值,就忽略这个文件。默认是86400秒,即一天。 stat_interval #logstash每隔多久检查一次被监听文件状态(是否有更新),默认是1秒。 start_position #logstash从什么位置开始读取文件数据,默认是结束位置。如果你是要导入原有数据,把这个设定改成 "beginning",logstash 进程就从头开始读取。
- 注意
- 通常你要导入原有数据进Elasticsearch的话,你还需要filter/date插件来修改默认的"@timestamp" 字段值。
- FileWatch只支持文件的绝对路径,而且会不自动递归目录。所以有需要的话,请用数组方式都写明具体哪些文件。
- 因为windows平台上没有inode的概念,Logstash某些版本在windows平台上监听文件不是很靠谱。windows平台上,推荐考虑使用nxlog作为收集端。
codec
filter
output
Elastic Search
Linux max_map_count参数修改的问题
vm.max_map_count=200000直接写到/etc/sysctl.conf中,然后执行sysctl -p