ELK 로그 분석 플랫폼 구축 (상) - ELK 소개 및 Elasticsearch 분포식 집단 구축

12506 단어
필기 내용: ELK 로그 분석 플랫폼 구축 (상) - ELK 소개 및 Elasticsearch 분포식 집단 필기 구축 날짜: 2018-03-02
  • 27.1 ELK 소개
  • 27.2 ELK 설치 준비
  • 27.3 설치es
  • 27.4 구성es
  • 27.5 curles클러스터 보기
  • ELK 소개
    요구 사항:
  • 비즈니스 성장과 서버 증가
  • 각종 접근 로그, 응용 로그, 오류 로그의 양이 갈수록 많아지면서 운영 인원들이 로그를 잘 관리하지 못한다
  • 개발자가 문제를 조사하고 서버에 로그를 검색해야 하기 때문에 불편
  • 운영자는 약간의 데이터를 필요로 하고 서버에 전송하여 로그를 분석해야 한다
  • ELK가 필요한 이유:
    일반적으로 우리는 로그 분석 장면을 진행해야 한다. 로그 파일에서grep,awk를 직접 사용하면 자신이 원하는 정보를 얻을 수 있다.그러나 규모가 크고 로그 양이 많으며 복잡한 장면에서 이 방법은 효율이 낮고 로그 양이 너무 많으면 어떻게 압축하고 텍스트 검색이 너무 느리면 어떻게 하는지, 어떻게 다차원적으로 조회하는지 문제에 직면한다.모든 서버의 로그 수집을 위한 집중화된 로그 관리가 필요합니다.흔히 볼 수 있는 해결 방향은 집중식 로그 수집 시스템을 구축하여 모든 노드의 로그를 통일적으로 수집하고 관리하며 방문하는 것이다.
    대형 시스템은 일반적으로 분포식 배치의 구조로 서로 다른 서비스 모듈이 서로 다른 서버에 배치된다. 문제가 발생할 때 대부분의 상황은 문제가 노출된 관건적인 정보에 따라 구체적인 서버와 서비스 모듈로 포지셔닝하고 집중식 일지 시스템을 구축하면 포지셔닝 문제의 효율을 높일 수 있다.
    다음과 같은 주요 특징을 포함하는 완벽한 중앙 집중식 로그 시스템
  • 수집 - 다양한 소스의 로그 데이터를 수집할 수 있음
  • 전송 - 로그 데이터를 중앙 시스템으로 안정적으로 전송할 수 있음
  • 스토리지 - 로그 데이터를 저장하는 방법
  • 분석 – UI 분석 지원
  • 경고 – 오류 보고, 모니터링 기능
  • ELK는 전체 해결 방안을 제공했고 모두 소스 소프트웨어로 서로 협조하여 사용하고 완벽하게 연결하여 많은 장소의 응용을 효율적으로 만족시켰다.현재 주류의 로그 시스템이다.
    ELK 소개:
    ELK는 세 개의 소스 오픈 소프트웨어의 줄임말로, 각각 Elasticsearch,Logstash,Kibana이다. 모두 소스 오픈 소프트웨어이다.그러나 현재 비트가 추가되었습니다. 비트는 경량급 로그 수집 처리 도구(Agent)로 비트가 차지하는 자원이 적기 때문에 각 서버에서 로그를 수집한 후 Logstash에 전송하기에 적합합니다. 정부에서도 이 도구를 추천합니다. 현재 원래의 ELK Stack 구성원에 비트 도구가 추가되어 Elastic Stack으로 이름이 바뀌었습니다.
    Elastic Stack에는 다음이 포함됩니다.
  • Elasticsearch는 소스 분포식 검색엔진으로 데이터 수집, 분석, 저장의 3대 기능을 제공한다.분포식, 제로 설정, 자동 발견, 인덱스 자동 분할, 인덱스 복사본 메커니즘,restful 스타일 인터페이스, 다중 데이터 원본, 자동 검색 부하 등이 특징이다.상세한 것은 Elasticsearch 권위 가이드
  • 를 참고할 수 있다.
  • Logstash는 주로 로그를 수집, 분석, 필터하는 도구로 대량의 데이터 획득 방식을 지원한다.일반적인 작업 방식은 c/s 구조이고client단은 로그를 수집해야 하는 호스트에 설치되며 서버단은 받은 각 노드의 로그를 필터, 수정 등 작업을elasticsearch에 함께 보냅니다.
  • 키바나도 오픈소스와 무료 도구로 키바나는 Logstash와 ElasticSearch에 로그 분석을 위한 우호적인 웹 인터페이스로 중요한 데이터 로그를 집계, 분석, 검색하는 데 도움을 줄 수 있다.
  • 비트는 이곳에서 경량급 로그 수집기이다. 사실 비트스 가족은 6명의 구성원이 있는데 초기의 ELK 구조에서 로그를 수집하고 해석했지만 로그는 메모리, cpu,io 등 자원의 소모가 비교적 높았다.Logstash에 비해 비트가 차지하는 시스템의 CPU와 메모리는 거의 무시할 수 있다
  • ELK Stack(5.0 버전 이후) --> Elastic Stack ===(ELK Stack + Beats)현재 비트에는 다음과 같은 6가지 도구가 있습니다.
  • Packetbeat: 네트워크 데이터(네트워크 트래픽 데이터 수집)
  • Metricbeat: 지표
  • Filebeat: 로그 파일(파일 데이터 수집)
  • Winlogbeat: 윈도우즈 이벤트 로그(Windows 이벤트 로그 데이터 수집)
  • Auditbeat: 감사 데이터(감사 로그 수집)
  • Heartbeat: 런타임 모니터링(시스템 런타임 데이터 수집)
  • x-pack 도구 정보:
  • x-pack은 Elastic Stack에 안전, 경보, 모니터링, 보고서, 도표를 한데 모은 확장 패키지를 제공했기 때문에 본고는 x-pack의 설치와 관련이 없다
  • ELK 홈페이지:
    https://www.elastic.co/cn/
    중국어 자습서:
    https://www.gitbook.com/book/chenryn/elk-stack-guide-cn/details
    ELK 스키마:
    ELK 설치 준비
    분산 클러스터 실험을 완료할 수 있도록 3대의 시스템을 준비합니다. 물론 더 많은 시스템을 사용할 수 있습니다.
  • 192.168.77.128
  • 192.168.77.130
  • 192.168.77.134

  • 역할 구분:
  • 3대의 기계가 모두 jdk1을 설치한다.8,elasticsearch는java가 개발한 것이기 때문
  • 3대 모두 elasticsearch(후속은 모두 es라고 약칭)
  • 설치
  • 192.168.77.128을 마스터로 사용
  • 192.168.77.130 및 192.168.77.134를 데이터 노드로 한다
  • 마스터 노드에 키바나 설치
  • 필요
  • 192.168.77.130에logstash
  • 설치
    ELK 버전 정보:
  • Elasticsearch-6.0.0
  • logstash-6.0.0
  • kibana-6.0.0
  • filebeat-6.0.0

  • 세 시스템을 구성하는 hosts 파일의 내용은 다음과 같습니다.
    $ vim /etc/hosts
    192.168.77.128 master-node
    192.168.77.130 data-node1
    192.168.77.134 data-node2

    그리고 세 대의 기계는 모두 방화벽을 닫거나 방화벽 규칙을 비워야 한다.
    설치
    먼저 공식적인 설치 설명서:
    https://www.elastic.co/guide/en/elastic-stack/current/installing-elastic-stack.html
    나도 이곳에서 정부에서 제공한 원본을 통해 설치를 진행하는데 다음과 같은 조작은 3대의 기계에서 모두 실행해야 한다. 왜냐하면 3대의 기계는 모두 es를 설치해야 하기 때문이다.
    [root@master-node ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
    [root@master-node ~]# vim /etc/yum.repos.d/elastic.repo  #       
    [elasticsearch-6.x]
    name=Elasticsearch repository for 6.x packages
    baseurl=https://artifacts.elastic.co/packages/6.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md
    [root@master-node ~]# yum install -y elasticsearch

    공식 소스 다운로드가 너무 느리면 rpm 패키지를 직접 다운로드하여 설치할 수도 있습니다.
    [root@master-node ~]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.rpm
    [root@master-node ~]# rpm -ivh elasticsearch-6.0.0.rpm

    설정 es
    elasticsearch 프로필은
    [root@master-node ~]# ll /etc/elasticsearch
        16
    -rw-rw---- 1 root elasticsearch 2869 2   17 03:03 elasticsearch.yml 
    -rw-rw---- 1 root elasticsearch 2809 2   17 03:03 jvm.options
    -rw-rw---- 1 root elasticsearch 5091 2   17 03:03 log4j2.properties
    [root@local ~]# ll /etc/sysconfig/elasticsearch 
    -rw-rw---- 1 root elasticsearch 1613 2   17 03:03 /etc/sysconfig/elasticsearch
    [root@master-node ~]# 
    elasticsearch.yml 파일은 집단 노드 등 관련 정보를 설정하는 데 사용되고elasticsearch 파일은 서비스 자체와 관련된 설정이다. 예를 들어 어떤 설정 파일의 경로와java의 일부 경로 설정 등이다.
    공식 구성 문서:
    https://www.elastic.co/guide/en/elasticsearch/reference/6.0/rpm.html
    클러스터 노드 구성을 시작하고 192.168.77.128에서 구성 파일을 편집합니다.
    [root@master-node ~]# vim /etc/elasticsearch/elasticsearch.yml  #          
    cluster.name: master-node  #       
    node.name: master  #      
    node.master: true  #           
    node.data: false  #          
    network.host: 0.0.0.0  #     ip,               ip
    http.port: 9200  # es      
    discovery.zen.ping.unicast.hosts: ["192.168.77.128", "192.168.77.130", "192.168.77.134"] #       
    [root@master-node ~]# 

    그런 다음 구성 파일을 다른 두 시스템으로 보냅니다.
    [root@master-node ~]# scp /etc/elasticsearch/elasticsearch.yml data-node1:/tmp/
    [root@master-node ~]# scp /etc/elasticsearch/elasticsearch.yml data-node2:/tmp/

    두 대의 기계에 가서 이 파일을 변경하고 다음과 같은 몇 군데를 수정한다.
    192.168.77.130:
    [root@data-node1 ~]# vim /tmp/elasticsearch.yml 
    node.name: data-node1
    node.master: false
    node.data: true
    [root@data-node1 ~]# cp /tmp/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml 
    cp: overwrite ‘/etc/elasticsearch/elasticsearch.yml’? yes
    [root@data-node1 ~]# 

    192.168.77.134:
    [root@data-node2 ~]# vim /tmp/elasticsearch.yml 
    node.name: data-node2
    node.master: false
    node.data: true
    [root@data-node2 ~]# cp /tmp/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml 
    cp: overwrite ‘/etc/elasticsearch/elasticsearch.yml’? yes
    [root@data-node2 ~]# 

    위의 구성이 완료되면 마스터 노드에서 es 서비스를 시작합니다.
    systemctl start elasticsearch.service
    주 노드의 시작이 완료된 후에 다른 노드의es 서비스를 시작합니다.
    오류 기록:
    내가 여기에서 메인 노드를 시작할 때 시작에 성공하지 못해서es의 로그를 보았지만 생성되지 않았다. 그러면 시스템 로그를 볼 수밖에 없다.
    [root@master-node ~]# ls /var/log/elasticsearch/
    [root@master-node ~]# tail -n50 /var/log/messages

    오류 로그는 다음과 같습니다.
    그림에서 보듯이 JDK의 경로가 잘못 설정되어 PATH에서 해당하는 디렉터리를 찾을 수 없습니다.
    그래서 JAVA를 보면...HOME 환경 변수의 값은 다음 위치를 가리킵니다.
    [root@master-node ~]# echo $JAVA_HOME
    /usr/local/jdk1.8/
    [root@master-node ~]# ls /usr/local/jdk1.8/
    bin        db       javafx-src.zip  lib      man          release  THIRDPARTYLICENSEREADME-JAVAFX.txt
    COPYRIGHT  include  jre             LICENSE  README.html  src.zip  THIRDPARTYLICENSEREADME.txt
    [root@master-node ~]# 

    가리키는 경로가 틀리지 않은 것을 발견하면 프로필에 export를 쓰는 것을 잊어버렸을 수도 있습니다. 그래서 프로필의 끝에 이 문장을 추가했습니다.
    export JAVA_HOME JAVA_BIN JRE_HOME PATH CLASSPATH

    source 명령을 사용하여 프로필을 다시 불러온 후에es서비스를 다시 시작했지만 시작하지 못했습니다. 그래서 오류 로그를 무시했습니다.
    이것은 환경 변수에서 자바 실행 가능한 파일을 찾을 수 없습니다. 그러면 쉽습니다. 소프트 링크를 만들면 됩니다.
    [root@master-node ~]# ln -s /usr/local/jdk1.8/bin/java /usr/bin/

    es서비스를 다시 시작하여 이번에 드디어 시작에 성공했습니다.
    [root@master-node ~]# systemctl restart elasticsearch.service 
    [root@master-node ~]# ps aux |grep elasticsearch
    elastic+   2655  9.4 31.8 3621592 1231396 ?     Ssl  15:42   0:14 /bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Djava.io.tmpdir=/tmp/elasticsearch.4M9NarAc -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/lib/elasticsearch -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:/var/log/elasticsearch/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=32 -XX:GCLogFileSize=64m -Des.path.home=/usr/share/elasticsearch -Des.path.conf=/etc/elasticsearch -cp /usr/share/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearch -p /var/run/elasticsearch/elasticsearch.pid --quiet
    root       2735  0.0  0.0 112660   968 pts/0    S+   15:44   0:00 grep --color=auto elasticsearch
    [root@master-node ~]# netstat -lntp |grep java  # es         
    tcp6       0      0 :::9200                 :::*                    LISTEN      2655/java           
    tcp6       0      0 :::9300                 :::*                    LISTEN      2655/java           
    [root@master-node ~]# 

    9300 포트는 집단 통신용이고 9200은 데이터 전송용이다.
    주 노드가 가동된 후에 순서대로 다른 노드를 가동하면 됩니다. 제가 있는 이곳의 다른 노드는 모두 정상적으로 가동됩니다.
    curles군집 상황 보기
    클러스터 상태 점검:
    [root@master-node ~]# curl '192.168.77.128:9200/_cluster/health?pretty'
    {
      "cluster_name" : "master-node",
      "status" : "green",  #  green        ,   yellow  red       
      "timed_out" : false,  #      
      "number_of_nodes" : 3, #         
      "number_of_data_nodes" : 2, #    data     
      "active_primary_shards" : 0,
      "active_shards" : 0,
      "relocating_shards" : 0,
      "initializing_shards" : 0,
      "unassigned_shards" : 0,
      "delayed_unassigned_shards" : 0,
      "number_of_pending_tasks" : 0,
      "number_of_in_flight_fetch" : 0,
      "task_max_waiting_in_queue_millis" : 0,
      "active_shards_percent_as_number" : 100.0
    }
    [root@master-node ~]# 

    클러스터 세부 정보를 보려면 다음과 같이 하십시오.
    [root@master-node ~]# curl '192.168.77.128:9200/_cluster/state?pretty'
    {
      "cluster_name" : "master-node",
      "compressed_size_in_bytes" : 354,
      "version" : 4,
      "state_uuid" : "QkECzZHVQJOXB7K_9CgXYQ",
      "master_node" : "SGez5oKUTa2eIijLp8MsLQ",
      "blocks" : { },
      "nodes" : {
        "4sJURH6cTsykgLberJ6pVw" : {
          "name" : "data-node1",
          "ephemeral_id" : "t16_uw92T5ajJqp2HWodrg",
          "transport_address" : "192.168.56.128:9300",
          "attributes" : { }
        },
        "SGez5oKUTa2eIijLp8MsLQ" : {
          "name" : "master",
          "ephemeral_id" : "eJZX20tpSNyJCHgBIC4x4Q",
          "transport_address" : "192.168.77.128:9300",
          "attributes" : { }
        },
        "nZ4L5-KwSdirnluhJTGn7Q" : {
          "name" : "data-node2",
          "ephemeral_id" : "pQENcoUcRY6fTs7SamX2KQ",
          "transport_address" : "192.168.77.134:9300",
          "attributes" : { }
        }
      },
      "metadata" : {
        "cluster_uuid" : "jZPv-awrQDe163Nu3y2hHw",
        "templates" : { },
        "indices" : { },
        "index-graveyard" : {
          "tombstones" : [ ]
        }
      },
      "routing_table" : {
        "indices" : { }
      },
      "routing_nodes" : {
        "unassigned" : [ ],
        "nodes" : {
          "nZ4L5-KwSdirnluhJTGn7Q" : [ ],
          "4sJURH6cTsykgLberJ6pVw" : [ ]
        }
      },
      "restore" : {
        "snapshots" : [ ]
      },
      "snapshot_deletions" : {
        "snapshot_deletions" : [ ]
      },
      "snapshots" : {
        "snapshots" : [ ]
      }
    }
    [root@master-node ~]# 

    검사에 문제가 없는 후에 우리의es집단은 완성되었다. 매우 간단하다.
    이 클러스터의 상태 정보는 브라우저를 통해서도 볼 수 있습니다.
    그러나 나타난 것도 문자열이다. 우리는 이 정보가 도형화된 방식으로 나타나기를 바란다. 그러면 키바나를 설치해서 이 데이터를 보여줘야 한다.
    curl 명령을 사용하여 elasticsearch를 조작하는 내용은 다음과 같습니다.
    http://zhaoyanblog.com/archives/732.html
    다음 편: ELK 로그 분석 플랫폼 구축(하)-키바나와logstash 서버 구축
    전재 대상:https://blog.51cto.com/zero01/2079879

    좋은 웹페이지 즐겨찾기