[컴] logstash 설정

로그스태시 / 설정

logstash 설정

2종류의 configuration file (ref. 1 참고)

  • pipeline config file : logstash 의 processing pipeline
    • deb 와 rpm 으로 설치한 경우
      • pipeline configuration file 들은 /etc/logstash/conf.d/에 있게 된다.
      • logstash 는 /etc/logstash/conf.d/*.conf 를 load 한다.
  • settings file : logstash 의 시작과 실행을 조정
    • logstash.yml
    • pipelines.yml
    • jvm.options
    • log4j2.properties
    • startup.options (Linux)
    • deb 와 rpm 으로 설치한 경우 /etc/logstash/ 에 있다.
      • /etc/logstash/logstash.yml

pipeline config file 사용법

  • deb, rpm 으로 설치한 경우 logstash path : /usr/share/logstash/bin/logstash
  • logstash-mine.conf 를 만든다.
  • bin/logstash -f logstash-mine.conf 를 하면 된다.
    • production 에서는 conf path 를 logstash.yml 에 정의하면 된다.
    • deb, rpm 에서는 /etc/logstash/conf.d/안의 *.conf 를 load 한다.
  • 아래처럼 3개의 section 으로 되어 있다.(input, filter, output)
  • 처리 부하가 다른 것들에 대한 처리를 위해 multiple pipeline 을 쓸 수 있다 : Introducing Multiple Pipelines in Logstash | Elastic Blog
# logstash-mine.conf


input { 
  stdin { }

}
filter {}
output {
  elasticsearch { hosts => ["localhost:9200"] }
  stdout { codec => rubydebug }
}

plugin 설정

각 section 에서 plugin 에 맞는 값을 넣게 된다. file 은 file plugin 을 이야기 하는 것이고, stdin 이라면 ‘logstash-input-stdin’ 을 이야기 하는 것이 된다. 이 값은 plugin list 를 확인하면 알 수 있다.

input {
  # 각 plugin 에 맞는 값을 넣게 된다. file 은 file plugin 을 이야기 하는 것이고, 
  # stdin 이라면 'logstash-input-stdin' 을 이야기 하는 것이 된다.
  # 이 값은 plugin list 를 확인하면 알 수 있다.
  file { # file plugin: logstash-input-file
    path => "/var/log/messages"
    type => "syslog"
  }

  file {
    path => "/var/log/apache/access.log"
    type => "apache"
  }
}

plugin list

확인방법 :

  • bin/logstash-plugin list 로 현재 설치된 plugin list 를 확인할 수 있다.
  • deb, rpm 으로 설치하면, 다음 path 에서 확인할 수 있다: /usr/share/logstash/bin/logstash-plugin
logstash-codec-avro
logstash-codec-cef
logstash-codec-collectd
logstash-codec-dots
logstash-codec-edn
logstash-codec-edn_lines
logstash-codec-es_bulk
logstash-codec-fluent
logstash-codec-graphite
logstash-codec-json
logstash-codec-json_lines
logstash-codec-line
logstash-codec-msgpack
logstash-codec-multiline
logstash-codec-netflow
logstash-codec-plain
logstash-codec-rubydebug
logstash-filter-aggregate
logstash-filter-anonymize
logstash-filter-cidr
logstash-filter-clone
logstash-filter-csv
logstash-filter-date
logstash-filter-de_dot
logstash-filter-dissect
logstash-filter-dns
logstash-filter-drop
logstash-filter-elasticsearch
logstash-filter-fingerprint
logstash-filter-geoip
logstash-filter-grok
logstash-filter-http
logstash-filter-json
logstash-filter-kv
logstash-filter-memcached
logstash-filter-metrics
logstash-filter-mutate
logstash-filter-prune
logstash-filter-ruby
logstash-filter-sleep
logstash-filter-split
logstash-filter-syslog_pri
logstash-filter-throttle
logstash-filter-translate
logstash-filter-truncate
logstash-filter-urldecode
logstash-filter-useragent
logstash-filter-uuid
logstash-filter-xml
logstash-input-azure_event_hubs
logstash-input-beats
└── logstash-input-elastic_agent (alias)
logstash-input-couchdb_changes
logstash-input-dead_letter_queue
logstash-input-elasticsearch
logstash-input-exec
logstash-input-file
logstash-input-ganglia
logstash-input-gelf
logstash-input-generator
logstash-input-graphite
logstash-input-heartbeat
logstash-input-http
logstash-input-http_poller
logstash-input-imap
logstash-input-jms
logstash-input-pipe
logstash-input-redis
logstash-input-s3
logstash-input-snmp
logstash-input-snmptrap
logstash-input-sqs
logstash-input-stdin
logstash-input-syslog
logstash-input-tcp
logstash-input-twitter
logstash-input-udp
logstash-input-unix
logstash-integration-elastic_enterprise_search
 ├── logstash-output-elastic_app_search
 └──  logstash-output-elastic_workplace_search
logstash-integration-jdbc
 ├── logstash-input-jdbc
 ├── logstash-filter-jdbc_streaming
 └── logstash-filter-jdbc_static
logstash-integration-kafka
 ├── logstash-input-kafka
 └── logstash-output-kafka
logstash-integration-rabbitmq
 ├── logstash-input-rabbitmq
 └── logstash-output-rabbitmq
logstash-output-cloudwatch
logstash-output-csv
logstash-output-elasticsearch
logstash-output-email
logstash-output-file
logstash-output-graphite
logstash-output-http
logstash-output-lumberjack
logstash-output-nagios
logstash-output-null
logstash-output-pipe
logstash-output-redis
logstash-output-s3
logstash-output-sns
logstash-output-sqs
logstash-output-stdout
logstash-output-tcp
logstash-output-udp
logstash-output-webhdfs
logstash-patterns-core

docker 에서 logstash

docker 에서 logstash 를 사용하는 경우, systemctl 을 사용하지 못하기 때문에 아무리 rpm 이나 deb 로 설치했다고 해도 systemctl 로 logstash 를 시작할 수 없다.

그리고 아래 경로에서도 확인되지만, /usr/share/logstash/config/logstash.yml 가 필요하다.

docker rockylinux image 에서 dnf install logstash 로 설치한 후에 /usr/share/logstash/bin/logstash 를 실행했는데, /etc/logstash/logstash.yml 이 존재함에도 인식하지 못했다. 그래서 /etc/logstash/logstash.yml/usr/share/logstash/config/logstash.yml 로 옮겼다.

그리고 그 후 *.conf/usr/share/logstash/config/conf.d 를 사용하지 않고, /etc/logstash/conf.d 에서 .conf 를 불러왔다.(logstash.yml 에 따로 path.confg를 설정해 놓지 않았다.)

ELK stack

beat 로 각 node 에서 logstash 로 정보를 던지고, logstash 가 그정보를 받아서 처리하고, elasticsearch 로 insert 시키게 하면 된다.

각 node 에 logstash 를 깔고 직접 elasticsearch 로 보내도 될 것 같지만, 그러면 부하가 있을 듯 싶긴 하다.

┌──────────────────┐        ┌───────────────────────────────────────┐
│                  │        │                                       │
│                  ├─────┬──┤► logstash --- elasticsearch --kibana  │
│ Beat             │     │  │                                       │
│ FileBeat,...     │     │  │                                       │
│                  │     │  │                                       │
└──────────────────┘     │  └───────────────────────────────────────┘
                         │
 ┌──────────────────┐    │
 │                  ├────┘
 │  Beat            │
 │  FileBeat,...    │
 │                  │
 └──────────────────┘
 ...

See Also

  1. 쿠…sal: [컴] IntelliJ에서 logstash source project 설정, 디버깅 환경 설정 - 1

References

  1. Configuring Logstash | Logstash Reference [8.2] | Elastic
  2. Structure of a config file | Logstash Reference [8.2] | Elastic

댓글 없음:

댓글 쓰기