ELK 및 Rsyslog를 사용한 로그 수집
9188 단어 programmingdevlivewebdevtutorial
이제 하나씩 살펴보겠습니다.
문제와 해결책:
우리는 실행된 응용 프로그램이 많은 3개의 기본 서버와 3개의 예비 서버를 보유하고 있습니다. 모든 애플리케이션은 JSON 문자열 형식의 로그를 Syslog에 기록합니다. 가까운 장래에 우리는 많은 Windows 컴퓨터에서 로그를 수집해야 하지만 이것은 완전히 다른 이야기입니다.
회로도 솔루션은 다음과 같습니다.
보기 좋고 확장 가능합니다. 준비 및 구성으로 이동하겠습니다.
ELK 준비:
우리는 Docker을 사랑하기 때문에 그것을 사용할 것입니다! 편의상 docker-compose 을 사용하겠습니다.
Docker 작성 파일:
version: '3.2'
services:
elasticsearch:
image:
docker.elastic.co/elasticsearch/elasticsearch:7.10.0
volumes:
- type: bind
source: ./elasticsearch/elasticsearch.yml
target: /usr/share/elasticsearch/config/elasticsearch.yml
read_only: true
- type: volume
source: elasticsearch
target: /usr/share/elasticsearch/data
environment:
ES_JAVA_OPTS: "-Xmx512m -Xms512m"
discovery.type: single-node
ports:
- "9200:9200"
- "9300:9300"
networks:
- elk
logstash:
image: docker.elastic.co/logstash/logstash:7.10.0
volumes:
- type: bind
source: ./logstash/config/logstash.yml
target: /usr/share/logstash/config/logstash.yml
read_only: true
- type: bind
source: ./logstash/pipeline
target: /usr/share/logstash/pipeline
read_only: true
ports:
- "5000:5000/udp"
- "9600:9600"
environment:
LS_JAVA_OPTS: "-Xmx512m -Xms512m"
networks:
- elk
depends_on:
- elasticsearch
kibana:
image: docker.elastic.co/kibana/kibana:7.10.0
volumes:
- type: bind
source: ./kibana/kibana.yml
target: /usr/share/kibana/config/kibana.yml
read_only: true
ports:
- "5601:5601"
networks:
- elk
depends_on:
- elasticsearch
networks:
elk:
driver: bridge
volumes:
elasticsearch:
지금은 하나의 노드로 충분하기 때문에 스케일링을 사용하지 않습니다. 그러나 앞으로는 스케일링에 대해 생각해야 할 것입니다.
Elasticsearch 구성:
cluster.name: "docker-cluster"
network.host: 0.0.0.0
# X-Pack settings
xpack.license.self_generated.type: basic
xpack.security.enabled: true
xpack.monitoring.collection.enabled: true
Kibana 구성:
server.name: kibana
server.host: "0"
# X-Pack settings
xpack.monitoring.ui.container.elasticsearch.enabled: true
# Elasticsearch settings
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
elasticsearch.username: elastic
elasticsearch.password: strongpassword
Logstash 구성:
http.host: "0.0.0.0"
# X-Pack settings
xpack.monitoring.elasticsearch.hosts: [
"http://elasticsearch:9200" ]
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.username: elastic
xpack.monitoring.elasticsearch.password: strongpassword
Logstash 파이프라인 구성:
input {
udp {
port => 5000
codec => "json"
type => "rsyslog"
}
}
filter {
json {
source => "message"
skip_on_invalid_json => true
}
}
output {
elasticsearch {
index => "syslogs-%{+YYYY.MM}"
hosts => "elasticsearch:9200"
user => "elasticuser"
password => "strongpassword"
}
}
결국 스택을 실행할 수 있습니다.
docker-compose up -d
결국 컨테이너가 시작되면 주소 127.0.0.1:5601로 이동할 수 있으며 모든 것이 올바르게 완료되면 Kibana 웹 인터페이스로 들어갑니다.
서버에서 Rsyslog를 준비합니다.
우선, 애플리케이션의 모든 로그가 Syslog 에 속하는지 확인해야 합니다.
/etc/rsyslog.d/로 이동하여 두 개의 파일을 만듭니다.
나가는 데이터에 대한 템플릿을 준비하겠습니다. 구조를 다루겠습니다. 첫 번째 값은 향후 필터링을 위한 타임스탬프입니다. 또한 애플리케이션의 메시지는 JSON 형식으로 변환됩니다. 다음 값은 sysloghost입니다. 이것은 서버 호스트 시스템의 이름입니다. 앞으로 다른 서버에서 로그를 분리해야 하기 때문에 필요합니다. 마지막 값은 프로그램 이름입니다. 로그를 작성한 애플리케이션의 이름입니다.
template(name="json-template" type="list") {
constant(value="{")
constant(value="\"@timestamp\":\"") property(name="timereported" dateFormat="rfc3339")
constant(value="\",\"message\":\"") property(name="msg" format="json")
constant(value="\",\"sysloghost\":\"") property(name="hostname")
constant(value="\",\"programname\":\"") property(name="programname")
constant(value="\"}\n")
}
if $programname == [“app1”,”app2”,”app3”] then @elk-server-api:5000;json-template
Array matching working only in rsyslog ≥ 7.2
키바나로 이동
먼저 Kibana를 구성하려면 관리/인덱스 패턴으로 이동하여 패턴
syslogs-*
을 생성합니다. 그런 다음 Kibana는 모든 로그 인덱스를 찾습니다.Kibana 검색 페이지에서 Kibana Query Language(KQL)을 사용하여 로그를 선택하고 필터링할 수 있습니다. 예:
sysloghost : “Server1”
sysloghost : “Server1” and programname : “App2”
level
로 필터링: sysloghost : “Server1” and programname : “App2” and level : “info”
추신 Index Lifecycle Policies (ILM)을 구성하는 것을 잊지 마십시오.
Index Lifecycle Policies의 예:
그게 다야. 보다 편리한 로그 모니터링을 위해 심플Kibana Dashboard로 설정하였습니다. 다음과 같습니다.
결론
다른 서버 및 서비스에서 로그를 수집하기 위해 rsyslog 및 ELK 과 함께 간단한 솔루션을 사용할 수 있습니다. 그 결과 필요한 로그를 모니터링하고 찾을 수 있는 빠르고 유연하며 확장 가능한 시스템을 얻게 되었습니다.
이전에 게시됨maddevs.io.
Reference
이 문제에 관하여(ELK 및 Rsyslog를 사용한 로그 수집), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/maddevs/log-collecting-with-elk-and-rsyslog-29hc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)