Rsyslog + kafka + ELK (클 러 스 터) 배치

8436 단어 log
원본 링크: http://www.suixinl.top/index.php/archives/39/
현재 회사 에서 등 보 를 하려 면 로그 감사 가 필요 합 니 다. 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 에 색인 이 생 겼 는 지, 색인 을 만 들 고 로그 내용 을 볼 수 있 는 지 확인 하 십시오.
 

좋은 웹페이지 즐겨찾기