Elasticsearch와 AWX 로그 통합

소개



k3s의 검증 환경상에 ElasticsearchAWX 가 갖추어졌으므로, AWX 실행 로그를 제휴해 보았습니다.
이전과 마찬가지로, @sky_jokerxx 씨의 Blog를 참고하면서, ES·AWX가 같은 Kubernetes 클러스터상에 있는 구성에서의 설정의 일례로서 기록을 남겨 둡니다.

참고 : Ansible Tower(AWX)의 시스템 로그 및 작업 실행 로그를 먼저 Elasticsearch에 가져와 가시화하는 순서(비망록)입니다. | 일상 엔지니어의 Tech Blog

환경


  • k3s v0.10.0 (Kubernetes v1.16.2)
  • Elasticsearch 7.4.1
  • AWX 8.0.0

  • Logstash 배포



    Elasticsearch와 데이터를 연결하기 위해 Logstash도 Kubernetes에 배포합니다.

    logstash-awx.yaml
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: logstash-awx
      namespace: awx
    data:
      logstash.conf: |-
        input {
            http {
                port => 5140
            }
        }
        filter {
          json {
              source => "message"
          }
        }
        output {
            elasticsearch {
                hosts => "elasticsearch-es-http.elastic"
                index => "awx"
                user => "elastic"
                password => "<Elasticsearchのパスワード>"
            }
        }
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: logstash-awx
      namespace: awx
    spec:
      selector:
        matchLabels:
          app: logstash-awx
      template:
        metadata:
          labels:
            app: logstash-awx
        spec:
          containers:
          - image: docker.elastic.co/logstash/logstash-oss:7.4.1
            name: logstash-awx
            ports:
            - name: logstash
              containerPort: 5140
              protocol: TCP
            volumeMounts:
            - name: config
              mountPath: /usr/share/logstash/pipeline
              readOnly: true
            command:        
            - "/bin/sh"
            - "-c"
            - "sed -i -e 's/Xms1g/Xms256m/g' -e 's/Xmx1g/Xmx256m/g' /usr/share/logstash/config/jvm.options; logstash"
            resources:
              limits:
                memory: 0.5Gi
                cpu: "500m"
              requests:
                memory: 0.5Gi
                cpu: "500m"
          volumes:
          - name: config
            configMap:
              name: logstash-awx
              items:
              - key: logstash.conf
                path: logstash.conf
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: logstash-awx
      namespace: awx
      labels:
        app: logstash-awx
    spec:
      selector:
        app: logstash-awx
      ports:
      - name: logstash
        port: 5140
        targetPort: 5140
        protocol: TCP
    

    Logstash의 namespace는 AWX와 같은 (awx)에 배포하고 있습니다.
    동일한 클러스터의 다른 네임 스페이스에있는 서비스를 대상으로 지정할 때,
    .
    라고 지정하면 OK입니다. (ConfigMap의 Elasticsearch 호스트 지정 부분)
    Elasticsearch의 User/Password는 대개 기본값을 지정합니다.
    다른 namespace에서는 Secret을 참조 할 수 없기 때문에 Password도 직접 쓰고 있습니다. (향후 요 검토)

    또한 호스트 리소스에 여유가 없기 때문에 리소스를 깎기로 결정했습니다.
    (Java 힙을 잘 바꾸는 방법이 없고, 역업에서 어떻게든하고 있습니다)

    이 YAML 파일을 배포하고
    $ kubectl apply -f logstash-awx.yaml 
    configmap/logstash-awx created
    deployment.apps/logstash-awx created
    service/logstash-awx created
    

    부팅하고 포트가 LISTEN될 때까지 기다립니다.
    $ kubectl get pod -n awx
    NAME                            READY   STATUS        RESTARTS   AGE
    awx-postgresql-postgresql-0     1/1     Running       0          13h
    awx-0                           4/4     Running       0          13h
    logstash-awx-786599d98b-hswsk   1/1     Running       0          8s
    $ kubectl logs -f logstash-awx-786599d98b-hswsk -n awx
    〜中略〜
    [2019-10-24T08:07:20,044][INFO ][logstash.inputs.http     ] Starting http input listener {:address=>"0.0.0.0:5140", :ssl=>"false"}
    

    AWX에서 로그 출력 설정




    왼쪽 메뉴 하단의 "설정"-> "시스템"을 클릭한 후 상단의 "로깅"을 선택하고 각 항목에 다음 값을 설정합니다.
  • 로그 어그리게이터: http://logstash-awx
  • 로그 어그리게이터 포트: 5140
  • 로그 애그리 게이터 유형 : "logstash"선택
  • 로그 애그리 게이터 프로토콜 : "HTTPS/HTTP"선택

  • 로그 어그리게이터의 프로토콜은 TCP에서도 테스트는 성공하지만, 실제 데이터 연동시 JSON 파싱에 실패합니다.
    또한 HTTPS/HTTP를 선택한 경우는 어그리게이터의 지정에 「http://」를 붙이지 않으면 https로 접속해 가고, 접속에 실패합니다.

    값을 입력한 후 테스트를 클릭하고 문제가 없으면 저장합니다.
    저장 후 상단의 "외부 로깅 사용"을 켭니다.

    설정이 완료되면 적당히 작업을 움직여보십시오.

    Elasticsearch(Kibana)에서 확인



    Kibana에 로그인하고 Management->Elasticsearch Index Management 란에 "awx"라는 인덱스가 보이면 로그 연동이 가능합니다.

    Kibana Index Patterns에서 "Create index pattern"을 클릭,
    "Time Filter field name"에 "@timestamp"을 지정하여 작성하면 OK입니다.


    끝에



    우선 로그의 제휴까지는 할 수 있었습니다.
    그리고는 Kibana의 Dashboard(visualization)를 만들면 완벽합니다만, 만드는 방법을 잘 모르고…

    좋은 웹페이지 즐겨찾기