Rsyslog + kafka + ELK (클 러 스 터) 배치
8436 단어 log
현재 회사 에서 등 보 를 하려 면 로그 감사 가 필요 합 니 다. rsyslog 를 사용 하여 모든 서버 의 로 그 를 수집 하 는 것 을 초보 적 으로 고려 해 야 합 니 다.또한 우리 가 운영 하 는 과정 에서 도 로 그 를 조회 해 야 한 다 는 점 을 고려 하여 rsyslog 가 수집 한 로 그 를 인터페이스 로 통합 하여 수집 한 로그 유형 을 조회 할 수 있 습 니 다. 시스템 로그, my sql 로그, 방화벽, waf, F5 로그, sftp, smtp 로그 등 오픈 소스 제품: Rsyslog, Kafka,ELK 처리 프로 세 스: Vm Rsyslog - - > Rsyslog Server -- omkafka -- > Kafka -- > Logstash -- > Elasticsearch -- > Kibana ps: omkafka 모듈 은 rsyslog v 8.7.0 이후 버 전에 서 만 지 원 됩 니 다.
환경:
Server
IPADDR
Applicaiton
ELK Node1
10.10.27.125
zookeeper kafka elasticsearch logstash kibana
ELK Node1
10.10.27.126
zookeeper kafka elasticsearch logstash
ELK Node1
10.10.27.127
zookeeper kafka elasticsearch logstash
Rsyslog server
10.10.27.121
Rsyslog server
Rsyslog Node
10.10.27.122
Rsyslog client
1. docker 와 docker - compose 설치
저 는 RHEL 시스템 을 사용 합 니 다. redhat 의 extras 소스 를 사용 하여 docker 를 설치 합 니 다.
yum install -y docker
wget https://github.com/docker/compose/releases/download/1.25.5/docker-compose-Linux-x86_64
mv docker-compose-Linux-x86_64 /usr/bin/docker-compose
2, 필요 한 미 러 를 당 겨
docker pull zookeeper:3.4.13
docker pull wurstmeister/kafka
docker pull elasticsearch:7.7.0
docker pull daocloud.io/library/kibana:7.7.0
docker pull daocloud.io/library/logstash:7.7.0
docker tag wurstmeister/kafka:latest kafka:2.12-2.5.0
docker tag docker.io/zookeeper:3.4.13 docker.io/zookeeper:3.4.13
docker tag daocloud.io/library/kibana:7.7.0 kibana:7.7.0
docker tag daocloud.io/library/logstash:7.7.0 logstash:7.7.0
3. 사용 할 프로필 준비
mkdir -p /data/zookeeper
mkdir -p /data/kafka
mkdir -p /data/logstash/conf
mkdir -p /data/es/conf
mkdir -p /data/es/data
chmod 777 /data/es/data
mkdir -p /data/kibana
~]# cat /data/es/conf/elasticsearch.yml
cluster.name: es-cluster
network.host: 0.0.0.0
node.name: master1 # node.name,e.g master2,master3
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
network.publish_host: 10.10.27.125 # IP
discovery.zen.minimum_master_nodes: 1
discovery.zen.ping.unicast.hosts: ["10.10.27.125","10.10.27.126","10.10.27.127"]
cluster.initial_master_nodes: ["10.10.27.125","10.10.27.126","10.10.27.127"]
~]# cat /data/logstash/conf/logstash.conf
input{
kafka{
topics => ["system-log"] # rsyslog topic
bootstrap_servers => ["10.10.27.125:9092,10.10.27.126:9092,10.10.27.127:9092"]
}
}
output{
elasticsearch {
hosts => ["10.10.27.125:9200","10.10.27.126:9200","10.10.27.127:9200"]
index => "system-log-%{+YYYY.MM.dd}"
}
stdout {
codec => rubydebug
}
}
~]# cat /data/kibana/conf/kibana.yml
#
# ** THIS IS AN AUTO-GENERATED FILE **
#
# Default Kibana configuration for docker target
server.name: kibana
server.host: "0.0.0.0"
elasticsearch.hosts: [ "http://10.10.27.125:9200","http://10.10.27.126:9200","http://10.10.27.127:9200" ]
monitoring.ui.container.elasticsearch.enabled: true
4. docker - compose. yml 설정 편집
~]# mkdir /data/elk
~]# cat /data/elk/docker-compose.yml
version: '2.1' # 2.1 ,
services:
elasticsearch:
image: elasticsearch:7.7.0
container_name: elasticsearch
environment:
ES_JAVA_OPTS: -Xms1g -Xmx1g
network_mode: host
volumes:
- /data/es/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- /data/es/data:/usr/share/elasticsearch/data
ports:
- 9200:9200
kibana:
image: kibana:7.7.0
container_name: kibana
links:
- elasticsearch
depends_on:
- elasticsearch #kibana elasticsearch
volumes:
- /data/kibana/conf/kibana.yml:/usr/share/kibana/config/kibana.yml
ports:
- 5601:5601
logstash:
image: logstash:7.7.0
container_name: logstash
volumes:
- /data/logstash/conf/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
depends_on:
- elasticsearch
links:
- elasticsearch:es
ports:
- 4560:4560
zookeeper:
image: zookeeper:3.4.13
container_name: zookeeper
environment:
ZOO_PORT: 2181
ZOO_DATA_DIR: /data/zookeeper/data
ZOO_DATA_LOG_DIR: /data/zookeeper/logs
ZOO_MY_ID: 1 # , 2 ID,e.g 2,3
ZOO_SERVERS: "server.1=10.10.27.125:2888:3888 server.2=10.10.27.126:2888:3888 server.3=10.10.27.127:2888:3888"
volumes:
- /data/zookeeper:/data/zookeeper
network_mode: host
ports:
- 2181:2181
kafka:
image: kafka:2.12-2.5.0
container_name: kafka
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 1 #kafka broker , broker , 2 ID
KAFKA_PORT: 9092
KAFKA_HEAP_OPTS: "-Xms1g -Xmx1g"
KAFKA_HOST_NAME: 10.10.27.125 # 2 IP
KAFKA_ADVERTISED_HOST_NAME: 10.10.27.125 # 2 IP
KAFKA_LOG_DIRS: /data/kafka
KAFKA_ZOOKEEPER_CONNECT: 10.10.27.125:2181,10.10.27.126:2181,10.10.27.127:2181
network_mode: host
volumes:
- /data:/data
5. ELK 배치
# ( docker-compose )
~]# docker-compose up -d
#
~]# docker-compose stop
#
~]# docker-compose up -d kafka
6. 클 러 스 터 상태 검증
(1) zookeeper 검증:
]# docker exec -it zookeeper bash
bash-4.4# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: follower
(2) kafka 검증:
]# docker exec -it kafka bash
bash-4.4# kafka-topics.sh --list --zookeeper 10.10.27.125:2181
__consumer_offsets
system-log
(3) elasticsearch 검증
]# curl '10.10.27.125:9200/_cat/nodes?v'
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
10.10.27.126 57 81 0 0.37 0.15 0.09 dilmrt * master2
10.10.27.125 34 83 0 0.11 0.10 0.06 dilmrt - master1
10.10.27.127 24 81 0 0.03 0.06 0.06 dilmrt - master3
(4) kibana 검증
http://10.10.27.125:5601
7. rsyslog 를 배치 하여 로 그 를 ELK 로 가 져 옵 니 다.
(1) rsyslog 서버
~]# cat /etc/rsyslog.conf
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
~]# cat /etc/rsyslog.d/default.conf
#### GLOBAL DIRECTIVES ####
# Use default timestamp format #
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$template myFormat,"%timestamp% %fromhost-ip% %syslogtag% %msg%
"
$ActionFileDefaultTemplate myFormat
# IP ,rsyslog
$template RemoteLogs,"/data/rsyslog/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log"
# IP ,
:fromhost-ip, !isequal, "127.0.0.1" ?RemoteLogs
~]# systemctl restart rsyslog
rsyslog server 에서 수집 한 로그 데 이 터 를 ELK 에 가 져 오기 위해 서 는 rsyslog server 에서 omkafka 모듈 에 사용 해 야 합 니 다.
~]# yum -y install rsyslog-kafka
~]# cat /etc//rsyslog.d/kafka.conf
# omkafka imfile
module(load="omkafka")
module(load="imfile")
# nginx template
template(name="SystemlogTemplate" type="string" string="%hostname%%syslogtag%%msg%
")
# ruleset
ruleset(name="systemlog-kafka") {
# kafka
action (
type="omkafka"
template="SystemlogTemplate"
topic="system-log"
broker="10.10.27.125:9092,10.10.27.126:9092,10.10.27.127:9092"
)
}
input(type="imfile" Tag="Systemlog" File="/data/rsyslog/*/*.log" Ruleset="systemlog-kafka"
~]# systemctl restart rsyslog
2. Rsyslog 클 라 이언 트
~]# cat /etc/rsyslog.conf #
*.* @10.10.27.121:514
# UDP rsyslog server
~]# systemctl restart rsyslog
이로써 rsyslog 준비 가 완료 되 었 습 니 다. / data / rsyslog 에서 로그 파일 이 생 성 되 었 는 지, ELK 에 색인 이 생 겼 는 지, 색인 을 만 들 고 로그 내용 을 볼 수 있 는 지 확인 하 십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로그인 기판 사용기판 팔레트에 로그인하는 방법 및 노드를 실행할 때 로그를 보는 방법(디버깅할 때 polkadot에서 기존 로그를 보는 데 유용할 수 있음). 팔레트/템플릿의 Cargo.toml에서 통나무 상자 가져오기 팔레트 템플...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.