Logstash 5.1.1 安装配置


安装和配置

java 环境:

  1. [root@ ~]# tar xf jdk-8u71-linux-x64.tar.gz
  2. [root@ ~]# mv jdk1.8.0_71 /usr/local/java_1.8.0
  3. [root@ ~]# ln -s /usr/local/java_1.8.0/bin/java /usr/bin/java
  4. [root@ ~]# vim /etc/profile
  5. # 添加:
  6. export JAVA_HOME=/usr/local/java_1.8.0
  7. export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
  8. export PATH=$PATH:$JAVA_HOME/bin
  9. [root@ ~]# source /etc/profile

安装logstash

直接使用rpm包安装:logstash-5.1.1.rpm

  1. [root@ ~]# rpm -ivh logstash-5.1.1.rpm

初始配置logstash

logstash安装后的所在目录为:/usr/share/logstash/,这里为了方便统一的管理,做规范的配置

  1. # 统一配置目录,/etc/logstash在安装logstash后就存在了配置文件,启动后又去/usr/share/logstash/config找,why?
  2. [root@ ~]# ln -s /etc/logstash /usr/share/logstash/config
  3. [root@ ~]# ln -s /usr/share/logstash/bin/* /usr/local/bin/
  4. # 调整jvm使用内存
  5. [root@ ~]# vim /etc/logstash/jvm.options
  6. -Xms128m
  7. -Xmx256m
  8. # 修改logstash基本配置
  9. [root@ ~]# vim /etc/logstash/logstash.yml
  10. pipeline:
  11. workers: 4
  12. batch:
  13. size: 125
  14. delay: 5
  15. path.config: /etc/logstash/conf.d
  16. path.logs: /data/logs/logstash
  17. http.port: 9600
  18. http.host: "192.168.31.140"

hello world

做个简单的测试

  1. [root@ ~]# logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'
  2. Sending Logstash's logs to /data/logs/logstash which is now configured via log4j2.properties
  3. The stdin plugin is now waiting for input:
  4. hello world
  5. {
  6. "@timestamp" => 2017-06-21T06:55:00.471Z,
  7. "@version" => "1",
  8. "host" => "baseos-1",
  9. "message" => "hello world",
  10. "tags" => []
  11. }

以上的例子从标准输入中获取数据,再从标准输出中输出。

在输出的结果中,"@timestamp"标记事件发生的时间点,"host"标记事件发生的主机,"tags"标记事件的某个方面的属性(这是一个数组,可以有多个属性),"type"标记事件的唯一类型。

Es 统一采用UTC时间存成长整型数据,会比北京时间晚八个小时。

命令行参数:

  • -e:直接执行后接的配置字符串,可以为空。空字符串''就默认是'input{stdin{}}output{stdout{codec=>rubydebug}}'。
  • -f:后接配置文件,可以将复杂的配置写到配置文件中。
  • -t:测试,用来测试后接的配置文件语法是否正确。写法:logstash -t -f conf_file_path
  • -l:后接日志文件,默认日志为配置文件logstash.yml中指定的日志文件。

Logstash 数据类型

array

数组可以是单个或者多个字符串值。

  1. path => [ "/var/log/messages", "/var/log/*.log" ]
  2. path => "/data/mysql/mysql.log"

如果指定了多次,追加数组。此实例path数组包含三个字符串元素。

boolean

布尔值必须是TRUE或者false。true和false不能有引号。

  1. ssl_enable => true

bytes

指定字节单位。支持的单位有SI (k M G T P E Z Y) 和 Binary (Ki Mi Gi Ti Pi Ei Zi Yi)。Binary单位基于1024,SI单位基于1000。不区分大小写和忽略值与单位之间的空格。如果没有指定单位,默认是byte。

  1. my_bytes => "1113" # 1113 bytes
  2. my_bytes => "10MiB" # 10485760 bytes
  3. my_bytes => "100kib" # 102400 bytes
  4. my_bytes => "180 mb" # 180000000 bytes

Codec

logstash编码名称用来表示数据编码。用于input和output段。便于数据的处理。如果input和output使用合适的编码,就无需单独的filter对数据进行处理。

  1. codec => "json"

hash

键值对,注意多个键值对用空格分隔,而不是逗号。

  1. match => {
  2. "field1" => "value1"
  3. "field2" => "value2"
  4. ... }

number

必须是有效的数值,浮点数或者整数。

port => 33

password

一个单独的字符串。

my_password => "password"

path

一个代表有效的操作系统路径。

my_path => "/tmp/logstash"

string

  1. name => "Hello world"
  2. name => 'It\'s a beautiful day'

Logstash 插件学习

Logstash必须要有input和output。

input插件

这里只介绍 stdin、file 和beats 插件

标准输入:stdin

一个标准输入配置实例:

  1. input {
  2. stdin {
  3. add_field => {"key" => "value"}
  4. codec => "plain"
  5. tags => ["add"]
  6. type => "stdin"
  7. }
  8. }

输出结果:

  1. The stdin plugin is now waiting for input:
  2. hello
  3. {
  4. "@timestamp" => 2017-06-21T07:34:57.899Z,
  5. "@version" => "1",
  6. "host" => "baseos-1",
  7. "message" => "hello",
  8. "type" => "stdin",
  9. "key" => "value",
  10. "tags" => [
  11. [0] "add"
  12. ]
  13. }

参数:

  • add_field:用于向Event中添加字段,hash类型,默认值:{} 。
  • codec:输入数据之后对数据进行解码,常见的就是在output指定输出结果为rubydebug 格式,string类型,默认值:"line"。
  • tags: 可以在Event中增加标签,以便于在后续的处理流程中使用,array类型。
  • type:如果采用elasticsearch做store,在默认情况下将作为elasticsearch的type,string类型。type字段作为事件本身的一部分存储,在kibana中通过type字段进行索引。

读取文件:file

文件读取插件主要用来抓取文件的变化信息,将变化信息封装成Event进程处理或者传递。

Logstash使用一个叫FileWatchRuby Gem 库来监听文件变化。这个库支持glob展开文件路劲(只支持绝对路径,不会自动递归目录),而且会记录一个隐藏的数据文件来跟踪被监听的日志文件的当前读取位置(默认这个文件叫.sincedb)。该数据库文件记录了每个被监听文件的inodemajor numberminor numberpos

一个读取文件配置实例:

  1. input {
  2. file {
  3. path => ["/data/logs/nginx/*.log"]
  4. exclude => ["/data/logs/nginx/nginx.pid","/data/logs/nginx/error.log"]
  5. discover_interval => 5
  6. sincedb_path => "/data/database/logstash/.sincedb_nginx_log"
  7. sincedb_write_interval => 10
  8. type => "nginx_log"
  9. start_position => "beginning"
  10. }
  11. }

参数:

  • discover_interval:logstash每隔多久去检查一次被监听的path路径下是否有新文件,默认15秒。
  • exclude:不想监听的文件路径。
  • close_older:一个已经被监听的文件,如果超过这个时间没有新内容更新,则关闭这个文件的句柄,默认3600秒。
  • ignore_older:每次检查文件列表时,如果一个文件的最后修改时间超过这个值,就忽略这个文件,默认86400秒,一天。
  • sincedb_path:sincedb文件的位置,默认$HOME/.sincedb。
  • sincedb_write_interval:多久写一次sincedb文件,默认15秒。
  • star_interval:每隔多久检查一次被监听文件状态是否有更新,默认15秒。
  • start_position:从什么位置开始读取文件数据,默认是结束位置。“beginning”从头开始读取。该选项仅对第一次被监听的文件起作用,如果sincedb文件已经记录了这个文件了,那么logstash依然会从记录过的pos开始读取,可以删除sincedb文件来让logstash从头开始读取被监听文件。

详细参考:https://www.elastic.co/guide/en/logstash/5.0/plugins-inputs-file.html

获取Nginx日志,并输出到标准输出
  1. [root@ ~]# vim /etc/logstash/conf.d/nginx_access.conf
  2. input {
  3. file {
  4. path => ["/data/logs/nginx/*.log"]
  5. exclude => ["/data/logs/nginx/nginx.pid","/data/logs/nginx/error.log"]
  6. discover_interval => 5
  7. sincedb_path => "/data/database/logstash/.sincedb_nginx_log"
  8. sincedb_write_interval => 10
  9. type => "nginx_log"
  10. start_position => "beginning"
  11. }
  12. }
  13. output {
  14. stdout {
  15. codec => rubydebug
  16. }
  17. }

测试效果:

  1. [root@baseos-1_192.168.31.140 ~]# logstash -f /etc/logstash/conf.d/nginx_access.conf
  2. Sending Logstash's logs to /data/logs/logstash which is now configured via log4j2.properties
  3. {
  4. "path" => "/data/logs/nginx/logstash.wangshenjin.com_access.log",
  5. "@timestamp" => 2017-06-21T07:10:36.270Z,
  6. "@version" => "1",
  7. "host" => "baseos-1",
  8. "message" => "192.168.31.140 - - [21/Jun/2017:15:10:36 +0800] \"GET / HTTP/1.1\" 200 33 \"-\" \"curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2\" \"-\"",
  9. "type" => "nginx_log",
  10. "tags" => []
  11. }

beats插件

Beats插件用于建立监听服务,接收Filebeat或者其他beat发送的Events

filebeat:

filebeat 是基于原先 logstash-forwarder 的源码改造出来的。换句话说:filebeat 就是新版的 logstash-forwarder,也会是 Elastic Stack 在 shipper 端的第一选择。

filebeat 配置:

  1. filebeat:
  2. prospectors:
  3. -
  4. paths:
  5. - /usr/local/nginx/logs/*.com.log
  6. input_type: log
  7. document_type: nginx-access
  8. tail_files: true
  9. output:
  10. logstash:
  11. hosts: ["192.168.31.140:5044"]
  12. shipper:
  13. tags: ["nginx_log"]

logstash 配置:

  1. input {
  2. beats {
  3. port => 5044
  4. }
  5. }
  6. output {
  7. stdout {
  8. codec => rubydebug
  9. }
  10. }

效果:

  1. [root@ conf.d]# logstash -f filebeat.conf
  2. Sending Logstash's logs to /data/logs/logstash which is now configured via log4j2.properties
  3. {
  4. "@timestamp" => 2017-06-21T10:49:12.596Z,
  5. "offset" => 605,
  6. "@version" => "1",
  7. "input_type" => "log",
  8. "beat" => {
  9. "hostname" => "salt-master",
  10. "name" => "salt-master",
  11. "version" => "5.1.1"
  12. },
  13. "host" => "salt-master",
  14. "source" => "/usr/local/nginx/logs/access.log",
  15. "message" => "192.168.31.1 - - [24/Feb/2017:17:00:59 +0800] \"GET / HTTP/1.1\" 301 184 \"-\" \"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\"",
  16. "type" => "nginx-access",
  17. "tags" => [
  18. [0] "beats_input_codec_plain_applied"
  19. ]
  20. }

参数:

  • port:监听的端口,数值类型,必填字段。
  • host:监听的IP,默认值为"0.0.0.0",string类型,非必填。
  • client_inactivity_timeout:多长时间关闭连接,默认值60s,数值类型,非必填。
  • ssl:是否启动SSL,默认值false,布尔类型,非必填。
  • ssl_certificate:证书路径,string类型,非必填。
    • 如果logstash使用IP访问,证书里的subjectAltName字段需要包含logstash的IP,否则报错:
    • x509: cannot validate certificate for 192.168.1.241 because it doesn't contain any IP SANs
  • ssl_key:SSL秘钥,string类型,非必填。
  • ssl_key_passphrase:SSL秘钥密码,string类型,非必填。
  • ssl_verify_mode:是否认证客户端,可选值“none”、”peer”、”force_peer”,默认none,非必填。

详细参考:https://www.elastic.co/guide/en/logstash/5.0/plugins-inputs-beats.html

beats SSL:

这里采用 easyrsa 生成logstash证书。

如果logstash使用IP访问,证书里的subjectAltName字段需要包含logstash的IP。easyrsa签署证书时,可以采用--subject-alt-name来添加:

  1. ./easyrsa gen-req logstash_server nopass # 生成证书签署文件
  2. ./easyrsa --subject-alt-name="IP:192.168.31.140" sign server logstash_server # 签署证书

Filter插件

grok

Logstash使用grok模块对任意文本解析并结构化输出,Logstash默认带有120中匹配模式。

grok的语法格式为 %{SYNTAX:SEMANTIC},前面是grok-pattrens中定义的变量,后面可以自定义变量的名称, 如果有双引号""或者中括号[],需要加 \ 进行转义。

  • SYNTAX 是要匹配的模式,例如3.14匹配 NUMBER 模式,127.0.0.1 匹配 IP 模式。

  • SEMANTIC 是匹配到的文本片段的标识,例如 “3.14” 可以是一个时间的持续时间,所以可以简单地叫做"duration" ,字符串"55.3.244.1"可以被标识为“client”。

所以,grok过滤器表达式可以写成: %{NUMBER:duration} %{IP:client}

默认情况下,所有的SEMANTIC是以字符串的方式保存,如果想要转换一个SEMANTIC的数据类型,例如转换一个字符串为整形,可以写成如下的方式: %{NUMBER:num:int}

一个例子,示例日志如下所示:

  1. 55.3.244.1 GET /index.html 15824 0.043

filter 配置如下所示:

  1. filter {
  2. grok {
  3. match => {
  4. "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}"
  5. }
  6. }
  7. }

效果如下所示:

  1. 55.3.244.1 GET /index.html 15824 0.043
  2. {
  3. "duration" => "0.043",
  4. "request" => "/index.html",
  5. "@timestamp" => 2017-06-22T01:49:27.773Z,
  6. "method" => "GET",
  7. "bytes" => "15824",
  8. "@version" => "1",
  9. "host" => "baseos-1",
  10. "client" => "55.3.244.1",
  11. "message" => "55.3.244.1 GET /index.html 15824 0.043",
  12. "tags" => []
  13. }
一个nginx日志例子:

nginx日志格式:

  1. '$remote_addr - $remote_user [$time_local] "$request" '
  2. '$status $body_bytes_sent "$http_referer" '
  3. '"$http_user_agent" "$http_x_forwarded_for"';

filter 配置如下所示:

  1. filter {
  2. if [type] == "nginx-access-log" {
  3. grok {
  4. match => {
  5. "message" => "%{IPORHOST:remote_addr} - %{USERNAME:remote_user} \[%{HTTPDATE:[@metadata][timestamp]}\] \"%{DATA:request}\" %{INT:status} %{INT
  6. :body_bytes_sent} \"%{DATA:http_referer}\" \"%{DATA:http_user_agent}\" \"%{USERNAME:http_x_forwarded_for}\""
  7. }
  8. }
  9. }
  10. }

效果如下所示:

  1. Sending Logstash's logs to /data/logs/logstash which is now configured via log4j2.properties
  2. {
  3. "remote_addr" => "192.168.31.130",
  4. "request" => "GET / HTTP/1.1",
  5. "body_bytes_sent" => "33",
  6. "message" => "192.168.31.130 - - [22/Jun/2017:13:50:33 +0800] \"GET / HTTP/1.1\" 200 33 \"-\" \"curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2\" \"-\"",
  7. "type" => "nginx-access-log",
  8. "tags" => [],
  9. "http_user_agent" => "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2",
  10. "remote_user" => "-",
  11. "path" => "/data/logs/nginx/logstash.wangshenjin.com_access.log",
  12. "@timestamp" => 2017-06-22T05:50:34.860Z,
  13. "http_referer" => "-",
  14. "@version" => "1",
  15. "host" => "baseos-1",
  16. "http_x_forwarded_for" => "-",
  17. "status" => "200"
  18. }

message是每段读进来的日志,IPORHOST、USERNAME、HTTPDATE等都是patterns/grok-patterns中定义好的正则格式名称,对照日志进行编写。

logstash 默认自带120种正则格式,参考:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns

自定义正则

很多时候,日志格式都是自定义的,这时候我们需要根据实际情况自定义正则。

这里以 remote_addr、request为例子,定义三个正则:

  1. IPADDR [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
  2. REQUESTPATH (?:/[\\A-Za-z0-9$.+!*'(){},~:;=@#% \[\]_<>^\-&?]*)+
  3. REQUESTPRO ([^"]*)

使用上面的自定义正则:

  1. IPADDR [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
  2. REQUESTPRO ([^"]*)
  3. REQUESTPATH (?:/[\\A-Za-z0-9$.+!*'(){},~:;=@#% \[\]_<>^\-&?]*)+
  4. NGXACCESSLOG %{IPADDR:client_ip} - (%{USERNAME:user}|-) \[%{HTTPDATE:log_timestamp}\] \"%{WORD:request_mathod} %{REQUESTPATH:request_path} %{REQUESTPRO:request_protocol}\" %{NUMBER:http_status} %{NUMBER:body_bytes_sent} (%{GREEDYDATA:http_referer}|-) \"%{DATA:http_user_agent}\" \"%{USERNAME:http_x_forwarded_for}\"

logstash 的配置:

  1. filter {
  2. grok {
  3. patterns_dir => "/etc/logstash/conf.d/patterns/mypattern"
  4. match => {
  5. "message" => "%{NGXACCESSLOG}"
  6. }
  7. }
  8. }
  9. output {
  10. stdout {
  11. codec => rubydebug
  12. }
  13. }

效果如下所示:

  1. {
  2. "log_timestamp" => "11/Oct/2017:19:32:22 +0800",
  3. "body_bytes_sent" => "13",
  4. "message" => "192.168.31.1 - - [11/Oct/2017:19:32:22 +0800] \"GET /test/t/ HTTP/1.1\" 200 13 \"-\" \"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36\" \"-\"",
  5. "type" => "logstash",
  6. "request_mathod" => "GET",
  7. "http_user_agent" => "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36",
  8. "path" => "/data/logs/nginx/logstash.wangshenjin.com_access.log",
  9. "@timestamp" => 2017-10-30T04:08:08.412Z,
  10. "http_referer" => "\"-\"",
  11. "@version" => "1",
  12. "host" => "baseos-1",
  13. "http_x_forwarded_for" => "-",
  14. "request_path" => "/test/t/",
  15. "client_ip" => "192.168.31.1",
  16. "http_status" => "200",
  17. "user" => "-",
  18. "request_protocol" => "HTTP/1.1"
  19. }

正则调试:https://grokdebug.herokuapp.com

统一管理grok正则:
  1. # 新建一个目录,统一存放自定义grok正则
  2. [root@ conf.d]# mkdir patterns
  3. [root@ conf.d]# vim patterns/nginx_access
  4. NGINXACCESS %{IPORHOST:remote_addr} - %{USERNAME:remote_user} \[%{HTTPDATE:log_timestamp}\] \"%{DATA:request}\" %{INT:status} %{INT:body_bytes_sent} \"%{DATA:http_referer}\" \"%{DATA:http_user_agent}\" \"%{USERNAME:http_x_forwarded_for}\"
  5. [root@ conf.d]# vim nginx_access.conf
  6. ****
  7. filter {
  8. if [type] == "nginx-access-log" {
  9. grok {
  10. patterns_dir => "/etc/logstash/conf.d/patterns" //设置自定义正则路径
  11. match => {
  12. "message" => "%{NGINXACCESS}"
  13. }
  14. }
  15. }
  16. }
  17. ****

date

格式化日期

  1. date {
  2. match => [ "log_timestamp", "YYYY-MM-dd HH:mm:ss"]
  3. }

geoip

借助GeoIP数据库来实现显示请求来源的地理位置,GeoIP 库可以根据 IP 地址提供对应的地域信息,包括国别,省市,经纬度等。

获取GeoIP数据库

  1. wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz
  2. gzip -d GeoLite2-City.mmdb.gz

配置:

  1. filter {
  2. ***
  3. geoip {
  4. source => "client_ip"
  5. fields => ["city_name" , "country_name" ,"continent_code" , "continent_name" ]
  6. database => "/etc/logstash/GeoLite2-City.mmdb"
  7. }
  8. }
参数:
  • source:设置解析IP地址的字段
  • fields:geoip数据库重需要的字段,主要有:city_name, continent_code, country_code2, country_code3, country_name, dma_code, ip, latitude, longitude, postal_code, region_name,timezone。
  • target:将geoip数据保存到一个字段内
  • database:IP地址数据库

output插件

redis

output配置如下:

  1. output {
  2. redis {
  3. host => "127.0.0.1"
  4. port => 6000
  5. password => "8a6715"
  6. data_type => "channel"
  7. key => "logstash-%{+yyyy.MM.dd}"
  8. }
  9. }

redis效果:

  1. 127.0.0.1:6000> subscribe logstash-2017.06.22
  2. Reading messages... (press Ctrl-C to quit)
  3. 1) "subscribe"
  4. 2) "logstash-2017.06.22"
  5. 3) (integer) 1
  6. 1) "message"
  7. 2) "logstash-2017.06.22"
  8. 3) "{\"remote_addr\":\"192.168.31.130\",\"request\":\"GET / HTTP/1.1\",\"body_bytes_sent\":\"33\",\"message\":\"192.168.31.130 - - [22/Jun/2017:15:51:22 +0800] \\\"GET / HTTP/1.1\\\" 200 33 \\\"-\\\" \\\"curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2\\\" \\\"-\\\"\",\"type\":\"nginx-access-log\",\"tags\":[],\"http_user_agent\":\"curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2\",\"remote_user\":\"-\",\"path\":\"/data/logs/nginx/logstash.wangshenjin.com_access.log\",\"@timestamp\":\"2017-06-22T07:51:23.484Z\",\"http_referer\":\"-\",\"@version\":\"1\",\"host\":\"baseos-1\",\"http_x_forwarded_for\":\"-\",\"status\":\"200\"}"

参数:

  • batch:设为true,通过发送一条rpush命令,存储一批的数据

    • 默认为false:1条rpush命令,存储1条数据
    • 设为true之后,1条rpush会发送batch_events条数据或发送batch_timeout秒(取决于哪一个先到达)
  • batch_events:一次rpush多少条
    • 默认50条
  • batch_timeout:一次rpush最多消耗多少s
    • 默认5s
  • codec:对输出数据进行codec,避免使用logstash的separate filter
  • congestion_interval:每多长时间进行一次拥塞检查(拥塞保护(仅用于data_type为list)
    • 默认1s,设为0,表示对每rpush一个,都进行检测
  • congestion_threshold:list中最多可以存在多少个item数据,默认是0:表示禁用拥塞检测
    • 当list中的数据量达到congestion_threshold,会阻塞直到有其他消费者消费list中的数据
    • 作用:防止OOM
  • data_type
    • list:使用rpush
    • channel:使用publish
  • db:使用redis的数据库,默认使用0号
  • host:数组
    • eg.["127.0.0.1:6380", "127.0.0.1"]
    • 可以指定port,会覆盖全局port
  • port:全局port,默认6379
  • key:list或channel的名字
    • 支持动态key,例如:logstash-%{type}
  • password:redis密码,默认不使用密码
  • reconnect_interval:失败重连的间隔,默认为1s
  • timeout:连接超时,默认5s

elasticsearch

output配置如下:

  1. output {
  2. elasticsearch {
  3. hosts => ["192.168.1.147:9200","192.168.1.151:9200"]
  4. index => "nginx-access-log-%{+YYYY.MM.dd}" #定义index pattern
  5. }
  6. }

参数:

  • hosts:elasticsearch服务列表

    • Default value is ["127.0.0.1"]
    • Value type is string
  • action:指定es的行为,index, delete, create, update

    • Default value is "index":index a document(该document就是一个来自于logstash的event)
    • delete:通过id删除一个document(需要指定document_id)
    • create:index a document(如果该document已经在index中存在,则失败)
    • update:通过id更新一个document
  • index:指定文档索引,支持字符扩展%{foo}

    • Value type is string
    • Default value is "logstash-%{+YYYY.MM.dd}"
    • 便于删除老数据
    • 在语法解析的时候,看到+号开头的,会自动认为后面是时间格式,尝试用时间格式来解析后续字符串。所以,之前处理过程中不要给自定义的字段起一个+号开头的名字
    • 索引名中不能有大写字母
    • 有时也会自定义为:logstash-%{servicename}-%{+YYYY.MM.dd}
  • cacert:验证server合法性的.cer或.pem文件路径

    • Value type is path
    • There is no default value for this setting.
  • codec:用于输出数据之前对数据 进行解码的的编解码器,而不需要一个单独的LogStash过滤器。

    • Value type is codec
    • 默认值:"plain"
  • document_id:文档索引ID,用来覆盖es中现有相同ID文档

    • Value type is string
    • There is no default value for this setting.
  • document_type:文档索引类型,支持字符扩展%{foo},不设置文档类型,文档类型会被设置为logs

    • Value type is string
    • There is no default value for this setting.
  • user:进入es cluster的用户

  • password:进入es cluster的密码

  • timeout:Set the timeout for network operations and requests sent Elasticsearch. If a timeout occurs,the request will be retried.

  • flush_size:默认500,logstash攒够500条数据再一次性向es发送。从5.0开始,flush_size值不能超过batch_size,否者以batch_size为批量发送的大小

    • Value type is number
    • Default value is 500
  • idle_flush_time:默认1s,如果1s内没攒够500条还是会一次性将攒的数据发出去给es

  • ssl:开启SSL与ES集群通信,未指定该参数,是否启动SSL将由ES的URL决定,如果显式禁用SSL,在主机中给出一个HTTPS URL,该插件也将拒绝启动。

    • Value type is boolean
    • There is no default value for this setting.

详细参考:https://www.elastic.co/guide/en/logstash/5.0/plugins-outputs-elasticsearch.html

logstash 5.1.1 学习的更多相关文章

  1. 学习ELK日志平台(二)

      一.ELK介绍 1.1 elasticsearch 1.1.1 elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索 ...

  2. 日志分析工具ELK配置详解

    日志分析工具ELK配置详解 一.ELK介绍 1.1 elasticsearch 1.1.1 elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分 ...

  3. python案例-用户登录

    要求: •输入用户名密码 •认证成功后显示欢迎信息 •输错三次后锁定 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 "" ...

  4. ELK基础架构解说-运维笔记

    一.ELK日志分析工具介绍1) Elasticsearch1.1)  Elasticsearch介绍ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索 ...

  5. ELK日志分析工具

    一.ELK介绍 1.1 elasticsearch 1.1.1 elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎 ...

  6. (转)开源分布式搜索平台ELK(Elasticsearch+Logstash+Kibana)入门学习资源索引

    Github, Soundcloud, FogCreek, Stackoverflow, Foursquare,等公司通过elasticsearch提供搜索或大规模日志分析可视化等服务.博主近4个月搜 ...

  7. ELK学习笔记(一)安装Elasticsearch、Kibana、Logstash和X-Pack

    最近在学习ELK的时候踩了不少的坑,特此写个笔记记录下学习过程. 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因 ...

  8. logstash 学习小记

    logstash 学习小记 标签(空格分隔): 日志收集 Introduce Logstash is a tool for managing events and logs. You can use ...

  9. 开源分布式搜索平台ELK(Elasticsearch+Logstash+Kibana)入门学习资源索引

    from:  http://www.w3c.com.cn/%E5%BC%80%E6%BA%90%E5%88%86%E5%B8%83%E5%BC%8F%E6%90%9C%E7%B4%A2%E5%B9%B ...

随机推荐

  1. zabbix 监控 ElasticSearch

    ElasticSearch  可以直接使用zabbix官方的模板 模板地址: https://github.com/mkhpalm/elastizabbix 通过zabbix server 直接监控 ...

  2. 不同平台windows、linux、mac 上换行符的问题

    http://blog.chinaunix.net/uid-26748613-id-3179595.html?page=2 https://blog.csdn.net/changruihe/artic ...

  3. [LeetCode] 162. Find Peak Element_Medium tag: Binary Search

    A peak element is an element that is greater than its neighbors. Given an input array nums, where nu ...

  4. QT linux

    一. 如果你是服务器版的CentOS,我建议你安装一下图形界面 1. 首先安装X window: yum groupinstall 'X WindowSystem'2. 然后安装GNOME: yum ...

  5. Vue+webpack项目中实现跨域的http请求

    目前Vue项目中对json数据的请求一般使用两个插件vue-resource和axios, 但vue-resource已经不再维护, 而axios是官方推荐的且npm下载量已经170多万,github ...

  6. NodeJs笔记 : express框架创建工程 ----- 路由设计

    一.搭建工程 1 .安装 express-generator $ npm install -g express-generator 2 .本地创建express项目 $ express -e blog ...

  7. Semaphore wait has lasted > 600 seconds

    解决方案:set global innodb_adaptive_hash_index=0;

  8. Eclipse + Pydev问题 : pydev unresolved import

    http://blog.csdn.net/qq_22765745/article/details/71054030http://blog.csdn.net/amghost/article/detail ...

  9. 获取MyBatis

    点击:获取MyBatis https://github.com/mybatis/mybatis-3/releases 点击:进入中文MyBatis的说明文档 http://www.mybatis.or ...

  10. WEB应用程序:AJAX全套

    概述 对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上. 1.传统的Web应用 一个简单操作需要 ...