ELK-LogStash配置解析

1、配置解析

1.1、目录结构

root@logstash:~# tree -L 1 /etc/logstash/
/etc/logstash/
├── conf.d               # 子配置的目录
├── jvm.options          # java相关的配置文件
├── log4j2.properties    # 日志的输出格式
├── logstash-sample.conf # logstash 的模板文件
├── logstash.yml         # logstash的主配置文件
├── pipelines.yml        # 流水线配置参数
└── startup.options      # 启动参数

1.2、配置结构组成

root@logstash:~# cat /etc/logstash/logstash.yml | grep '\-\-\-'
# ------------  Node identity ------------
# ------------ Data path ------------------
# ------------ Pipeline Settings --------------
# ------------ Pipeline Configuration Settings --------------
# ------------ API Settings -------------
# ------------ Module Settings ---------------
# ------------ Cloud Settings ---------------
# ------------ Queuing Settings --------------
# ------------ Dead-Letter Queue Settings --------------
# ------------ Debugging Settings --------------
# ------------ Other Settings --------------
# ------------ X-Pack Settings (not applicable for OSS build)--------------

# 在这么多配置项中,我们一般关注比较多的是Node、Data path、Pipeline,我们可以基于实际的主机环境来调整相关参数

1.3、核心配置

1.3.1、默认的配置示例

root@logstash:~# cat /etc/logstash/logstash-sample.conf | grep -Ev '^$|#'    
input {
  beats {
    port => 5044
  }
}
output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
  }
}

1.3.2、属性解析

logstash 的配置主要有各种插件功能组成,默认配置文件中使用了两个插件input和output
input设置的内容是从5044端口从 beats中获取数据
output设置的内容是将数据输从到elasticsearch中
   hosts 用于设定elasticsearch的连接地址
   index 用于设定数据存储到elasticsearch中的时候,数据的索引定义格式,索引的名称可以基于字符串也可以基于变量的方式来设定,@metadata 表示数据的属性信息,[beat] 表示从元属性信息中获取heat属性的值
   user 当elasticsearch存在认证信息的时候,输入用户名
   password 当elasticsearch存在认证信息的时候,输入与用户名匹配的密码信息。

2、插件

2.1、插件信息

查看logstash默认支持的插件
]$ logstash-plugin list --verbose
]$ logstash-plugin list | wc -l
113
结果显示:
   logstash默认支持105个插件,包含五大类:
       codec 编解码相关插件 filter 过滤规则相关插件
       input 输入信息相关插件 output 输出相关插件
       patterns 模式相关插件

2.2、插件功能

我们知道对于logstash来说,他的三大内容就是 input、filter、output,filter的主要作用就是对接受的数据进行筛选,将筛选后的符合条件的数据传输到对应的数据存储目标中,对于logstash7来说,
它支持46种过滤功能插件,满足我们各种场景的数据筛选和精确分析工作,我们在kibana中展示数据的时候,直接忽略掉无效数据,提高分析效率。
 
常见的工作场景:
 正则匹配-grok、时间处理-date、数据修改-mutate、
 地址查询-geoip、编解码-json、数值统计-metrics等

3、codec实践

3.1、简介

Codec 是 logstash 从 1.3.0 版开始新引入的概念(Codec 来自 Coder/decoder 两个单词的首字母缩写)。在此之前,logstash 只支持纯文本形式输入,然后以过滤器处理它。按照我们之前的理解
logstash其实仅仅是一个按照 input-filter-output 方式处理的数据流,当我们了解codec的作用之后,我们就会知道,一个完整的logstash其实是按照 input-decode-filter-encode-output 方式来处理的数据流。
 
对于7版本的logstash来说,他的codec支持25+种编解码的插件,在input中的编码插件中,我们用的最多的就是json,而在output中的编码插件用的比较多的仅仅是调试用的rubydebug。接下来我们主要以json和rubydebug的方式来演示。

3.2、stdout配置解析

3.2.1、配置

input {
beats {
   port => 5044
   codec => json  
 }
}
output {
 stdout { codec => json|rubydebug }
}

3.2.2、解析

注意:
  beats 表示我们从beats组件中接收传输过来的数据
  port 表示logstash与beats对接的端口是5044
  codec 用于输入数据的编解码器,默认是plain-单行字符串,若设置为json,表示按照json方式解析 rubydebug 
  一般会与output的stdout结合起来使用,表示信息的调试。

3.3、示例1-接收filebeat传输的json格式数据,并在当前屏幕上展示效果

3.3.1、配置filebeat.yml

cat << 'CAT_END' > my_nginx_json.yml 
filebeat.inputs:
- type: log
  id: nginx_access_json
  enabled: true
  paths:
    - /var/log/nginx/access_json.log
  fields:
    log_type: "access"
  fields_under_root: true
  json.keys_under_root: true
  json.overwrite_keys: true
- type: log
  id: nginx_error
  enabled: true
  paths:
    - /var/log/nginx/error.log
  fields:
    log_type: "error"
  fields_under_root: true
output.logstash:
 hosts: ["192.168.10.28:5044"]
CAT_END

# 启动filebeat配置文件
filebeat -e -c my_nginx_json.yml

3.3.2、配置logstash配置文件

cat << 'CAT_END' > my_nginx_logstash.yml 
input {
 beats {
  port => 5044
  codec => json
 }
}
output {
 stdout { codec => rubydebug }
}
CAT_END

# 启动logstash测试
logstash -f my_nginx_logstash.yml 

3.3.3、刷新nginx查看日志

[WARN ] 2023-06-07 20:44:57.759 [defaultEventExecutorGroup-4-1] json - Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. 
To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode. {
"tags" => [ [0] "beats_input_raw_event" ], "http_referrer" => "-", "@timestamp" => 2023-06-07T12:44:56.666Z, "agent" => { "name" => "filebeat", "type" => "filebeat", "hostname" => "filebeat", "version" => "7.17.10", "ephemeral_id" => "173cebe8-afb2-4b63-bde6-d2c1d6fccaa1", "id" => "c90b2a4b-82fd-4113-a77b-91a6073867eb" }, "request_time" => "0.000", "http_x_real_ip" => "-", "http_x_forwarded_for" => "-", "host" => { "name" => "filebeat" }, "remote_addr" => "192.168.10.1", "status" => "304", "@version" => "1", "input" => { "type" => "log" }, "remote_user" => "-", "ecs" => { "version" => "1.12.0" }, 结果显示: 我们将filebeat所有格式的数据都接收了,不仅能够按照定制的格式显示,还有我们增加的扩展字段。

3.4、示例2-将收集到的不同格式数据,传输到不同的es索引中

3.4.1、配置if语法

我们的数据有扩展字段,可以基于这个扩展字段将,数据识别出来,然后借助于logstash的if语句对
elasticsearch输出组件进行定制索引,格式如下:

output { 
  if [字段名] == "属性值1"{
    elasticsearch { 
      hosts => ["master.itcast.com:9200"]
      index => "索引名1"
    }
  }
  if [字段名] == "属性值2"{
    ...
  }  
}
 属性解析: == 是字符串的比较条件

3.4.2、logstash配置

cat << 'CAT_END' > my_nginx_logstash.yml 
input {
 beats {
  port => 5044
  codec => json
 }
}
output {
 if [log_type] == "access" {
   elasticsearch {
     hosts => ["192.168.10.25:9200"]
     index => "my-nginx-access-%{+yyyy.MM.dd}"
   }
 }
 if [log_type] == "error"{
   elasticsearch {
     hosts => ["192.168.10.25:9200"]
     index => "my-nginx-error-%{+yyyy.MM.dd}"
   }
 }
}
CAT_END

# 启动logstash测试
logstash -f my_nginx_logstash.yml 

3.4.2、配置filebeat.yml

cat << 'CAT_END' > my_nginx_json.yml 
filebeat.inputs:
- type: log
  id: nginx_access_json
  enabled: true
  paths:
    - /var/log/nginx/access_json.log
  fields:
    log_type: "access"
  fields_under_root: true
  json.keys_under_root: true
  json.overwrite_keys: true
- type: log
  id: nginx_error
  enabled: true
  paths:
    - /var/log/nginx/error.log
  fields:
    log_type: "error"
  fields_under_root: true
  
setup.template.settings:
  index.number_of_shards: 5
  index.number_of_replicas: 1
  
output.logstash:
 hosts: ["192.168.10.28:5044"]
CAT_END

# 启动filebeat配置文件
filebeat -e -c my_nginx_json.yml

3.4.3、访问nginx查看效果

 

posted @ 2023-06-07 21:11  小粉优化大师  阅读(321)  评论(0编辑  收藏  举报