Monitoring으로 로그 보기

소개



눈치채면, 여러가지 기능이 추가되고 있는 Elastic Stack입니다.
이번은 조금 작은 기능입니다만, 피릴리 온다(가나?).

Monitoring에서 로그 표시



Monitoring 기능은 각 노드와 인덱스의 메트릭을 표시했지만 Infra App의 Logs와 연동하여 로그를 표시하는 기능이 추가되었습니다.



하지만 기본적으로 메시지가 표시되는 것만으로 아무것도 나오지 않습니다.
쓰여진 대로, 제대로 Filebeat를 설정해 표시해 봅시다.

Filebeat 설정



설정은, 이런 느낌으로.
Elasticsearch가 타고 있는 서버에 Filebeat를 넣습니다. 이번에는 Monitoring용 클러스터가 있는 것은 아니므로, 그대로 로컬의 Elasticsearch에 보냅니다.

filebeat.yml
filebeat.config:
   modules:
     path: /etc/filebeat/modules.d/*.yml
   module: elasticsearch
output.elasticsearch:
   hosts: ["localhost:9200"]

이 설정으로 시작하면 다음과 같은 화면이 나옵니다.



(아까와는 버전 다릅니다만, 아무튼, 차 눈으로)

Github의 Issue을 보는 한, 워닝은 색 차이로 내 주는 것 같습니다.

로그 표시



Overview의 경우





여기에 표시되는 것은 최근 10건뿐입니다. 로그 아래에는 Logs UI에 대한 링크도 있으므로 모두보고 싶으면 그쪽으로 이동합니다.
이 버튼을 누르면 Logs UI로 가서 Cluster UUID로 필터링된 로그가 표시됩니다.



Node의 경우



Overview와 마찬가지로 로그가 표시됩니다. 여기에서는 표시된 노드와 관련된 노드가 표시됩니다.



Logs UI를 살펴보면 제대로 필터링됩니다.



Index의 경우





색인으로 필터링된 로그가 표시됩니다.
Logs UI로 날아갑니다.



컨테이너에 내장



Elasticsearch를 Docker 용 컨테이너로 시작하는 것이 있습니다.
그럴 때 로그를 쉽게 볼 수 있도록 Filebeat을 통합해 보겠습니다.
그렇다고해도 Elasticsearch의 컨테이너에 넣어 버리는 것이 아니라 다른 컨테이너에 넣은 Filebeat에서 로그를 읽고 Elasticsearch에 로그를 던집니다.

docker-compose.yml과 filebeat.yml을 다음과 같이 만들어 보겠습니다.

docker-compose.yml
version: '2'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0-SNAPSHOT
    container_name: elasticsearch4
    environment:
      - cluster.name=docker-cluster
      - node.name=node-1
      - cluster.initial_master_nodes=node-1
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - path.repo=/usr/share/elasticsearch/snapshots
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata1:/usr/share/elasticsearch/data
    ports:
      - 9204:9200
    networks:
      - esnet
  kibana:
    image: docker.elastic.co/kibana/kibana:7.1.0-SNAPSHOT
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch4:9200
    container_name: kibana4
    ports:
      - 5605:5601
    networks:
      - esnet
  beats4:
    image: docker.elastic.co/beats/filebeat:7.1.0-SNAPSHOT
    user: root
    environment:
      - ELASTICSEARCH_CONTAINER_NAME=elasticsearch4
      - ELASTICSEARCH_HOSTS=http://elasticsearch4:9200
      - KIBANA_HOST=http://kibana4:5601
    volumes:
      - /var/lib/docker/containers:/var/lib/docker/containers:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./filebeat.yml:/usr/share/filebeat/filebeat.yml
    networks:
      - esnet

volumes:
  esdata1:
    driver: local

networks:
  esnet:

호스트의 docker 관련 디렉토리를 참조할 수 있는 권한이 필요하므로 Filebeat의 기동 유저를 root로 하고 있습니다.

filebeat.yml
filebeat.autodiscover:
  providers:
    - type: docker
      labels.dedot: true
      templates:
        - condition:
            contains:
              docker.container.name: ${ELASTICSEARCH_CONTAINER_NAME:elasticsearch}
          config:
             - module: elasticsearch
               server:
                 enabled: true
                 input:
                   type: docker
                   containers.ids:
                     - "${data.docker.container.id}"
setup.kibana:
  host: "${KIBANA_HOST:kibana:5601}"
output.elasticsearch:
  hosts: '${ELASTICSEARCH_HOSTS:elasticsearch:9200}'

사이고에게



이런 식으로 로그도 표시되면 Monitoring용 클러스터도 운용하고 싶어지고 있네요.
그리고는, 다른 제품군도 로그를 볼 수 있게 되면 기쁠까.

좋은 웹페이지 즐겨찾기