로그스태시 / 설정
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 한다.
- pipeline configuration file 들은
- deb 와 rpm 으로 설치한 경우
- 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 한다.
- production 에서는 conf path 를
- 아래처럼 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
- Input plugins | Logstash Reference [8.2] | Elastic
- Output plugins | Logstash Reference [8.2] | Elastic
- Filter plugins | Logstash Reference [8.2] | Elastic
- Codec plugins | Logstash Reference [8.2] | Elastic
확인방법 :
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,... │
│ │
└──────────────────┘
...
댓글 없음:
댓글 쓰기