Kubernetes에 ELK(Logstash) 구축하기 #2

2022. 6. 16. 17:25프로그래밍 개발(Development)/k8s

반응형

k8s에 Elasticsearch 구축은 아래의 링크를 참조하세요.

2022.06.16 - [프로그래밍 개발(Development)/k8s] - Kubernetes에 ELK(Elasticsearch) 구축하기 #1

 

Kubernetes에 ELK(Elasticsearch) 구축하기 #1

엘라스틱서치(Elasticsearch)는 분산형 RESTful 검색 및 분석 엔진으로 엘라스틱 스택(Elastic Stack)의 중심에 위치하고 있으며, 엘라스틱 스택은 차세대 데이터 플랫폼으로 자리 잡고 있습니다. Elastic Sta

choco-life.tistory.com

 

이번에는 elasticseach가 구축 되었으니, Logstash 구축하는 방법에 대해서 알아보겠습니다.


Logstash

1. logstash-configmap.yaml

logstash.conf 파일과 logstash.yaml 파일을 configmap을 생성하여 관리할 수 있습니다.

input, filter, output 정보는 상황에 맞게 작성

elasticsearch로 데이터를 output으로 지정시 url은 {elasticsearch service name} : {elasticsearch service port}으로 연결

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: elk
  name: logstash-configmap
  labels:
    task: logging
    k8s-app: logstash
data:
  logstash.yml: |
    http.host: "127.0.0.0"
    path.config: /usr/share/logstash/pipeline
  logstash.conf: 
    input 
    {
      tcp 
      {
        port => 5000
      }
    }
    filter 
    {
      json 
      {
        source => "message"
        remove_field => ["@version","beat","count","fields","input_type","offset","source","host","tags","port","message"]
      }
    }
    output
    {
      elasticsearch
      {
        hosts => ["elasticsearch:9200"]
        manage_template => false
        index => "my_index"
        document_type => "doc"
      }      
    }

2. logstash-deployment.yaml

logstash Deployment 생성과 docker repository에서 logstash 이미지를 다운로드를 하며 logstash.conf 파일은 volume에서 매핑을 시켜준다.

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: elk
  name: logstash
spec:
  replicas: 1
  selector:
    matchLabels:
      app: logstash
  template:
    metadata:
      labels:
        app: logstash
    spec:
      containers:
      - name: logstash
        image: docker.elastic.co/logstash/logstash-oss:6.8.23
        ports:
        - name: logstash-tcp
          containerPort: 5000
        imagePullPolicy: IfNotPresent, # Always, Never
        volumeMounts:
        - name: config-volume
          mountPath: /usr/share/logstash/config
        - name: logstash-pipeline-volume
          mountPath: /usr/share/logstash/pipeline
        - name: tz-seoul
          mountPath: /etc/localtime
      volumes:
      - name: tz-seoul
        hostPath:
          path: /usr/share/zoneinfo/Asia/Seoul
      - name: config-volume
        configMap:
          name: logstash-configmap
          items:
          - key: logstash.yml
            path: logstash.yml
      - name: logstash-pipeline-volume
        configMap:
          name: logstash-configmap
          items:
          - key: logstash.conf
            path: logstash.conf

3. logstash-service.yaml

컨테이너간의 logstash를 통신할때는 아래와 같이 내부용 서비스를 생성하지만, 외부로부터 데이터를 수집하게 된다면, externalP 또는 NodePort 등을 이용하여 외부 접근을 허용하게 한다.

apiVersion: v1
kind: Service
metadata:
  namespace: elk
  name: logstash
  labels:
    app: logstash
spec:
  clusterIP: None
  ports:
  - name: logstash-tcp
    port: 5000
  selector:
    app: logstash

소스코드는 Github에서 다운로드 할 수 있다.

Github : https://github.com/Byeongin-Jeong/kubernetes

 

GitHub - Byeongin-Jeong/kubernetes

Contribute to Byeongin-Jeong/kubernetes development by creating an account on GitHub.

github.com

 

반응형