ELASTICSEARCH, LOGSTASH, KIBANA, 고효율 로그 관리 시스템 구축

24420 단어 구조
개인 블로그 주소 동기화 주소https://www.zhoutao123.com/?p=1612
ELK(ElasticSearch, LogStash 및 Kibana) 세 가지 조합은 매우 강력한 도구입니다. 여기서 우리는 로그 파일을 감시하고 로그를 ElasticSearch 검색엔진에 받아서 Kibana 시각화 도구를 이용하여 ElasticSearch 조회를 실현합니다.

ElasticSearch


공식 설명
Elasticsearch is a distributed, RESTful search and analytics engine capable of solving a growing number of use cases. As the heart of the Elastic Stack, it centrally stores your data so you can discover the expected and uncover the unexpected.

설치


공식 다운로드 주소https://www.elastic.co/cn/downloads/elasticsearch자신의 시스템 버전에 따라 다운로드 설치, 개인용 컴퓨터 시스템 Ubuntu18.04 따라서 Linux를 선택하려면 자신의 운영체제에 따라 적당한 버전을 선택하여 다운로드하십시오.
다운로드 완료 후 압축 풀기 사용, 압축 풀기 완료 후 파일 디렉터리는 다음과 같습니다.
├── bin
├── config
├── data
├── lib
├── LICENSE.txt
├── logs
├── modules
├── node-slaver-1
├── NOTICE.txt
├── plugins
└── README.textile


그 중에서 우리가 사용하는 명령은 bin 디렉터리에 있고, 프로필은 config 디렉터리에 있으며, 압축 해제된 파일을 자신의 홈 디렉터리에 두어 권한이 부족한 오류 문제를 방지하는 것을 권장합니다.

프로비저닝

config 디렉터리에 들어가면 파일 목록은 다음과 같습니다.
├── elasticsearch.keystore
├── elasticsearch.yml
├── jvm.options
├── log4j2.properties
├── role_mapping.yml
├── roles.yml
├── users
└── users_roles

ElasticSerach 프로필elasticsearch.yml, JVM 프로필jvm.options, 로그 인쇄 프로필log4j2.properties에 중점을 두고 있습니다.
이러한 프로필에서 알 수 있듯이 ElasticSearch와 자바는 매우 큰 관계를 가진다. 예, ElasticSearch는 자바 가상 기기에서 실행되는 시스템입니다.

elasticSearch.yml 프로필


이 파일의 대부분은 다음과 같은 주요 관심사에 대한 설명입니다.
  • cluster.name – 클러스터 이름
  • node.name - 이 노드의 이름(구성하지 않으면 UUID 이름이 제공됨)
  • path.logs – 로그 디렉터리, 기본값 유지 권장
  • http.port – ElasticSearch 실행 포트 기본 9200
  • JVM 구성 파일


    여기에서 우리는 주로 메모리 크기를 설정하여 자신의 하드웨어 설정에 따라 ElasticSearch의 메모리 크기를 조정합니다. (일반적으로 수정할 필요가 없습니다. 컴퓨터의 설정이 좋거나 설정이 약간 낮지 않으면 이 메모리 파라미터를 수정해야 합니다.)
  • Xms1g
  • Xmx1g

  • 다른 매개변수는 당분간 수정할 필요가 없습니다.

    로그 구성


    로그 설정은 일반적으로 변경할 필요가 없습니다. 로그의 형식 등 정보를 수정할 수 있습니다. Log4J의 로그 형식 명령을 참고하여 설정할 수 있습니다. 여기는 너무 많은 설명을 하지 않습니다.

    테스트


    구성이 완료되면 bin 디렉터리에 들어가서 elasticSearch 명령을 실행합니다
    ./elasticsearch
    

    start 글자를 보고 브라우저나 터미널에서 접근http://localhost:9200( ElasticSearch , 9200 ) 현재 ElasticSearch 노드에 대한 정보는 다음과 같습니다.
    {
        "name": "node-master",
        "cluster_name": "cluster-dev",
        "cluster_uuid": "i1ti04HsQA6TK_ywrabGlA",
        "version": {
            "number": "6.4.1",
            "build_flavor": "default",
            "build_type": "tar",
            "build_hash": "e36acdb",
            "build_date": "2018-09-13T22:18:07.696808Z",
            "build_snapshot": false,
            "lucene_version": "7.4.0",
            "minimum_wire_compatibility_version": "5.6.0",
            "minimum_index_compatibility_version": "5.0.0"
        },
        "tagline": "You Know, for Search"
    }
    
    

    ElasticSearch의 다른 사용 방법은 이 글을 참고하십시오. ElasticSearch에서 자주 사용하는 명령

    Kibana


    Kibana lets you visualize your Elasticsearch data and navigate the Elastic Stack, so you can do anything from learning why you’re getting paged at 2:00 a.m. to understanding the impact rain might have on your quarterly numbers.
    Kibana: ElasticSearch의 시각화 도구입니다. Kibana를 설치하는 것은 간단합니다. 설치 패키지를 다운로드하고 압축을 풀고 설정하고 실행하면 됩니다.

    설치


    공식 다운로드 주소https://www.elastic.co/cn/downloads/kibana자체 시스템 버전 다운로드 설치, 개인용 컴퓨터 시스템 Ubuntu 18.04 LINUX-64-BIT 선택, 사용자 운영 체제에 따라 적절한 버전 다운로드
    압축 해제 후의 디렉터리 구조는
    .
    ├── bin
    ├── config
    ├── data
    ├── LICENSE.txt
    ├── node
    ├── node_modules
    ├── NOTICE.txt
    ├── optimize
    ├── package.json
    ├── plugins
    ├── README.txt
    ├── src
    ├── webpackShims
    └── yarn.lock
    
    

    ElasticSearch 디렉터리와 유사한 구조로 binconfig 디렉터리는 우리가 중점적으로 주목하는 것이다

    프로비저닝


    config 디렉터리를 열고 유일한 파일 kibana.yml 을 편집합니다. 그 중 몇 개의 매개 변수는 우리가 관심을 가져야 합니다.
  • server.포트 Kibana에서 실행되는 포트 기본 5601
  • elasticsearch.url ElasticSearch 실행 주소, 기본값은http://localhost:9200위에서 ElasticSearch를 설정하면 ElasticSearch의 실행 포트를 수정할 수 있습니다.
  • elasticsearch.username 만약 당신의 ElasticSearch가 사용자 이름을 설정했다면, 여기는 보완이 필요합니다
  • elasticsearch.password와 함께 비밀번호 설정
  • 테스트


    Kibana의 bin 디렉터리로 돌아가서 실행./kibana하면 브라우저 액세스를 열 수 있습니다(http://localhost:5601) Kibana 관리 인터페이스에 들어갈 수 있습니다. 여기서 우리는 DevTools 기능, 기타 통계 등 기능을 사용하기만 하면 연구 학습을 하지 않습니다.
    DevTools 명령에서 ElasticSearch 명령을 매우 편리하게 사용할 수 있고 하이라이트와 알림을 매우 편리하게 사용할 수 있습니다.

    LogStash


    Logstash is an open source, server-side data processing pipeline that ingests data from a multitude of sources simultaneously, transforms it, and then sends it to your favorite “stash.” (Ours is Elasticsearch, naturally.)

    설치


    공식 다운로드 주소https://www.elastic.co/downloads/logstash사용자 시스템 버전에 따라 다운로드 설치, 개인 컴퓨터 시스템 Ubuntu18.04 따라서 ZIP 선택 사용자 운영 체제에 따라 적절한 버전 다운로드
    그리고 스트레스 해소 준비.

    프로비저닝


    LogStash 내부에는 Kafka, ElasticSearch, Redis, Nginx 등을 포함하여 지원 파일, 단말기 등을 입력하면 로그 파일을 모의한 다음에 Logstash를 이용하여 변환을 수집하여 ElasticSearch로 규정합니다.

    사용자 정의 로그 스크립트 만들기


    먼저 셸 스크립트를 완성합니다. 이 셸 스크립트는 1S 출력 시간마다 파일에 기록됩니다.
    rm /tmp/logstash.log
    set index=2
    while true
    do
        cur_date="`date '+%Y %m %d %H %m %S'`" 
        echo ${cur_date} >> /tmp/logstash.log
        sleep 1
    done
    

    이 스크립트는/tmp 디렉터리에 logstash를 만듭니다.log 로그 파일, 그리고 데이터를 이 파일에 기록합니다. Logstash는 이 파일을 감시하고 이 파일을 포맷해야 합니다.

    시작 구성 파일 만들기


    LogStash 구성은 다음과 같습니다( conf.cnf Logstash .
  • input는 데이터 입력을 표시합니다. 여기서 우리는 file 모니터링 파일path을 사용하여 모니터링 파일 디렉터리를 표시하고 일치 기호를 지원합니다. start_position는 모니터링의 시작 위치
  • 를 표시합니다.
  • 필터 처리는 필터를 우리의 데이터로 변환할 수 있고 비교적 복잡한 설정
  • output 출력, 여기는 컨트롤러, ElasticSearch, Redis 등 시스템으로 출력할 수 있으며 다중 출력 설정을 지원합니다.
  • input{
      file{
        path => "/tmp/logstash.log"
        start_position => "end"
      }
    }
    
    filter {
        grok {
           match => { "message" => "%{YEAR:year} %{MONTHNUM:month} %{MONTHDAY:day} %{HOUR:hours} %{MINUTE:minute} %{SECOND:second}"}
        }
    
       json {
         source => "message"
         target => "jsoncontent"
       }
    }
    
    output{
      elasticsearch{
        hosts => ['127.0.0.1:9200']
        index => 'log'
      }
    }
    
    

    또한 위 셸 스크립트의 코드에 따라 각 시간 속성은 공백으로 구분되기 때문에 우리grok도 가짜 로그 상황에 따라 적합해야 한다.그래서 %{YEAR:year} %{MONTHNUM:month} %{MONTHDAY:day} %{HOUR:hours} %{MINUTE:minute} %{SECOND:second} 그 중에서 사칭 앞의 표시 유형.콜론 뒤에 필드 속성을 표시하고 변환하는 과정에서 키로 ElasticSearch에 저장됩니다. 물론 이런 유형은 매우 많습니다. 공식 지원의 위치는 다음과 같습니다.https://github.com/elastic/logstash
    마지막 출력, 초기 디버깅은 다음과 같이 콘솔에 출력할 수 있습니다.
    output{
      stdout{
        codec => rubydebug
      }
    }
    

    출력이 정확하면 ElasticSearch에 기록합니다.

    테스트


    우선 콘솔 표준 출력을 사용해서 효과를 봅시다

    콘솔 인쇄


    수정 conf.cnf 파일의 마지막 output 속성은
    output{
      stdout{
        codec => rubydebug
      }
    }
    

    Logstash 디렉터리로 전환, 입력./bin/logstash -f ./conf.cnf 실행
    Sending Logstash logs to /home/tao/soft/logstash/logs which is now configured via log4j2.properties
    [2018-09-26T12:45:50,585][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
    [2018-09-26T12:45:51,080][INFO ][logstash.runner          ] Starting Logstash {"logstash.version"=>"6.4.1"}
    [2018-09-26T12:45:54,236][INFO ][logstash.pipeline        ] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>8, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50}
    [2018-09-26T12:45:54,739][INFO ][logstash.inputs.file     ] No sincedb_path set, generating one based on the "path" setting {:sincedb_path=>"/home/tao/soft/logstash/data/plugins/inputs/file/.sincedb_485b967e0d7e8bef0d95852573188f7a", :path=>["/tmp/logstash.log"]}
    [2018-09-26T12:45:54,780][INFO ][logstash.pipeline        ] Pipeline started successfully {:pipeline_id=>"main", :thread=>"#<0x5fa716fa run="">"}
    [2018-09-26T12:45:54,838][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
    [2018-09-26T12:45:54,853][INFO ][filewatch.observingtail  ] START, creating Discoverer, Watch with file and sincedb collections
    [2018-09-26T12:45:55,110][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}
    
    

    이때 파일에 데이터가 추가되지 않았기 때문에 LogStash는 이를 감시합니다. 예를 들어 Shell을 호출하여 파일에 데이터를 쓰고 관찰 결과 , 0 , 를 관찰합니다. 또한 이 셸 스크립트(Ctrl+C)를 닫아서 데이터에 방해가 되지 않도록 주의하십시오.
    [2018-09-26T12:47:55,748][WARN ][logstash.filters.json    ] Error parsing json {:source=>"message", :raw=>"2018 09 26 12 09 55", :exception=>#<LogStash::Json::ParserError: Invalid numeric value: Leading zeroes not allowed
     at [Source: (byte[])"2018 09 26 12 09 55"; line: 1, column: 7]>}
    {
              "host" => "linux",
          "@version" => "1",
           "message" => "2018 09 26 12 09 55",
              "year" => "2018",
        "@timestamp" => 2018-09-26T04:47:55.646Z,
             "month" => "09",
            "second" => "55",
             "hours" => "12",
              "path" => "/tmp/logstash.log",
            "minute" => "09",
              "tags" => [
            [0] "_jsonparsefailure"
        ],
               "day" => "26"
    }
    [2018-09-26T12:47:56,762][WARN ][logstash.filters.json    ] Error parsing json {:source=>"message", :raw=>"2018 09 26 12 09 56", :exception=>#<LogStash::Json::ParserError: Invalid numeric value: Leading zeroes not allowed
     at [Source: (byte[])"2018 09 26 12 09 56"; line: 1, column: 7]>}
    {
              "host" => "linux",
          "@version" => "1",
           "message" => "2018 09 26 12 09 56",
              "year" => "2018",
        "@timestamp" => 2018-09-26T04:47:56.656Z,
             "month" => "09",
            "second" => "56",
             "hours" => "12",
              "path" => "/tmp/logstash.log",
            "minute" => "09",
              "tags" => [
            [0] "_jsonparsefailure"
        ],
               "day" => "26"
    }
    

    데이터가 json 형식으로 변환된 것을 볼 수 있습니다. 그 중에서 year,month입니다.day와 hours는 바로 저희가 gork에서 설정한 거예요.

    ElasticSearch로 가져오기


    마지막 출력 수정
    output{
      elasticsearch{
        hosts => ['127.0.0.1:9200']
        index => 'log'
      }
    }
    

    이 때 ElasticSearch는 9200 포트에서 시작해야 합니다. 다른 포트의 경우 수정해야 합니다.
    위의 명령과 마찬가지로 ./bin/logstash -f ./conf.cnf 를 실행하고 셸 스크립트를 실행합니다. 이 때 Kibana를 통해 데이터 GET /log/doc/_search 를 조회하면 ElasticSearch에 끊임없이 기록된 로그를 볼 수 있습니다.

    좋은 웹페이지 즐겨찾기