Elasticsearch, Logstash 및 Kibana 소개 및 배포

11199 단어 빅데이터 관련

ELK 소개


ELK는 Elasticsearch, Logstash, Kibana 세 부분으로 구성됩니다.Elasticsearch는 개원 분포식 검색 엔진으로 분포식, 제로 설정, 자동 발견, 인덱스 자동 분할, 인덱스 사본 메커니즘,restful 스타일 인터페이스, 다중 데이터 원본, 자동 검색 부하 등이 특징이다.간단하게 말하면 그는 전문 검색 엔진으로 대량의 데이터를 신속하게 저장하고 검색하며 분석할 수 있다.Elastic도 분포식 데이터베이스로 이해되고 여러 서버가 협동하여 작업할 수 있으며 각 서버는 여러 개의 Elastic 실례를 실행할 수 있다.문서 방식으로 데이터를 저장하는 것은 mangoDB와 유사하다.Elasticsearch, MongoDB와 Hadoop을 비교한 이 글은 Elasticsearch와 MongoDB를 비교했다. Logstash는 완전히 원본을 시작하는 도구로 분산되고 다양한 로그 로그나 다른 데이터 원본의 데이터 정보를 수집, 분석, 처리하고 나중에 사용할 수 있도록 저장할 수 있다.Kibana는 Logstash와 ElasticSearch에 제공하는 로그 분석에 우호적인 웹 인터페이스로 중요한 데이터 로그를 요약하고 분석하며 검색하는 데 도움을 줍니다.사실 간단하게 말하자면 ELK의 핵심은 Elasticsearch,logstash와kibana가 모두 Elasticsearch를 위해 서비스하는 것이다.logstash를 사용하면 로그 파일, 데이터베이스 등 다른 출처의 데이터를 Elasticsearch에 쉽게 가져올 수 있습니다.키바나를 사용하면 Elasticsearch에 저장된 데이터를 직관적이고 명확하게 보여주고 도표를 생성하여 분석을 돕고 컨트롤러를 제공하여 Elasticsearch를 조작할 수 있다.그래서 logstash와kibana가 없으면 Elasticsearch도 정상적으로 사용할 수 있지만 그다지 편리하고 효율적이지 않을 뿐이다.

다운로드 및 배포


소프트웨어 다운로드


우리는 홈페이지에서 설치 패키지를 얻을 수 있다.사실 홈페이지가 좋아요. 그리고 중국어 홈페이지도 있어요.홈페이지의 문서는 이해하기 쉽고 예도 실현하기 쉽다.Elastic 홈페이지 Elasticsearch,logstash,kibana 다운로드 페이지 역사 버전 다운로드 페이지 Past Releases는 홈페이지에서 자신이 필요로 하는 버전을 다운로드하면 되지만 가장 좋은 것은 세 가지 버전이 일치하는 것이다. Elasticsearch는 하나의 버전이 많고 변화가 큰 대작으로 저는 변덕스러운 프로그래머들이 개발한 것이라고 생각한다.

배포 환경


Mac(linux)、jdk1.8

Elasticsearch 배포


압축을 풀면 먼저 설정합니다.프로필 경로:/config/elasticsearch.yml. 주요 구성: - cluster.name: 그룹 이름, 기본값은 자동으로 분배됩니다. - node.name은 노드 이름입니다. 기본값은 자동으로 분배됩니다. - http.포트는 액세스 포트이며 기본 9200입니다.
내 구성은 다음과 같습니다.
cluster.name: my-application
node.name: node-1

다음 문장을 실행하면 Elasticsearch를 시작합니다.여기서 -d는 수호 프로세스를 통해 시작됩니다.
./bin/elasticsearch
./bin/elasticsearch -d

시작 여부를 확인합니다.
curl 'http://localhost:9200/?pretty'

또는 브라우저에서 이 주소에 직접 액세스하면 다음과 같은 반환 결과를 표시할 수 있습니다.
{
  "name" : "node-1",
  "cluster_name" : "my-application",
  "cluster_uuid" : "Q79rR5mCTICI7UfEcwmDnA",
  "version" : {
    "number" : "5.0.1",
    "build_hash" : "080bb47",
    "build_date" : "2016-11-11T22:08:49.812Z",
    "build_snapshot" : false,
    "lucene_version" : "6.2.1"
  },
  "tagline" : "You Know, for Search"
}

이렇게 해서 우리의 Elasticsearch가 성공적으로 시작되었다.

kibana 배포


키바나를 풀고 먼저 설정합니다.프로필 경로:config/kibana.yml 주요 구성:
  • server.host:kibana의 접근 IP 주소입니다
  • server.port:kibana의 접근 포트, 기본 5601
  • elasticsearch.url: 해당하는 Elasticsearch 주소입니다
  • kibana.index:kibana의 index 인덱스 이름입니다

  • 내 구성은 다음과 같습니다.
    server.host: "localhost"
    elasticsearch.url: "http://localhost:9200"
    kibana.index: ".kibana"
    server.port: 5601

    Elasticsearch와 같이 시작 방법:
    ./bin/kibana

    브라우저 액세스http://localhost:9200키바나 홈페이지에 들어갈 수 있습니다.

    logstash 배포


    logstash를 풀고 먼저 설정을 합니다.읊다, 읊조리다

    작업 원리


    Logstash는 파이프 방식으로 로그의 수집 처리와 출력을 합니다. 입력부터 출력까지 전체 과정은 세 가지 단계를 포함합니다. 입력 input – > 처리 filter (필수가 아닙니다) – > 출력output입니다. 각 단계마다 많은 플러그인을 선택할 수 있습니다. 예를 들어 file,elasticsearch,redis;Elasticsearch나 출력 콘솔에 출력하는 등 다양한 방식을 지정할 수도 있습니다.

    형식 구성


    구성 형식은 전체 단계의 세 부분을 포함해야 하기 때문에 표준 형식은 다음과 같다.
    input {...} 
    filter {...} 
    output {...}

    각 섹션은 다음과 같이 콘솔과 데이터베이스에서 입력할 것과 같은 여러 가지 방식을 지정할 수 있습니다.
    input {
        stdin {
    
        }
        jdbc {
            ...
        }
    }

    출력 콘솔 또는 Elasticsearch의 경우 다음과 같이 구성됩니다.
    output {
      elasticsearch {
      hosts => "localhost:9200"
      index => "mysql_accept"
      document_type => "accept"
    
      }
      stdout {
      codec => json_lines
      }
    }

    filter의 설정이 필수적이지 않기 때문에 여기는 잠시 표시하지 않고 추후 설명이 필요합니다.

    상용 명령


    -f 로그스타쉬의 프로필을 지정하고 프로필에 따라 로그스타쉬를 설정하고 시작합니다.
    ./logstash -f logstash.conf

    - e 문자열은 설정으로 시작하고 기본 콘솔은 콘솔 출력을 입력합니다
    ./logstash -e ""

    - t 구성 파일이 올바르고 종료되는지 테스트
    ./logstash -t logstash.conf

    부팅


    위의 글은logstash의 기본 설정과 시작 명령을 설명했습니다.하지만 우리logstash가 컨트롤러에서 입력하고 컨트롤러에서 출력하는 일만 한다면 정말 무의미하다.일반적인 업무 수요는 대량의 데이터를 데이터베이스에서 Elasticsearch로 인덱스해야 하기 때문에 MySQL과oracle에서 데이터를 Elasticsearch에 저장하는 방법을 소개합니다.Jdbc inputplugin은 공식 문서로 jdbc 플러그인에 대한 소개입니다. 관심이 있으면 볼 수 있습니다. 왜냐하면 공식 문서가 가장 권위가 있기 때문입니다.jdbc의 input 설정에서 다음 몇 가지는 비교적 중요하다.
  • jdbc_driver_library:jdbc 의존 패키지 경로
  • jdbc_driver_class: jdbc 드라이브를 등록합니다.여기 조심해야 돼!ySQL이면 com으로 구성됩니다.mysql.jdbc.Driver, oracle의 경우 Java::oracle로 구성됩니다.jdbc.driver.Oracle Driver
  • jdbc_connection_string: 데이터베이스 연결
  • jdbc_user: 데이터베이스 사용자 이름
  • jdbc_password: 데이터베이스 비밀번호
  • schedule: 정시 서비스 설정, 데이터 동기화를 얼마나 자주 실행하는지, 형식은 *****로 날짜와 달로 구분됩니다
  • statement: 동기화할 때마다 sql 실행 문장
  • statement_filepath: 만약 sql 문장이 파일에 쓰여 있다면, 여기에 sql 파일의 경로를 설정합니다

  • 다음 몇 가지는 증분 업데이트 설정입니다.logstash는 데이터베이스에 대한 두 가지 업데이트에 대해 두 가지 제어 방식이 있는데 하나는 시간에 따라 하는 것이고 하나는 자증에 따라 판단하는 것이다.동기화를 한 번 실행한 후,logstash는 마지막 동기화의 그 기록 시간이나 부가가치를 파일에 기록하고, 다음 동기화는 최신 기록으로부터 실행합니다. 기록 값은 sql 문장에서:sql_last_value를 대체합니다.만약 시간으로 제어를 한다면, sql 문장은 이렇게 쓴다.
    select * from tablename where update_time>:sql_last_value

    프로비저닝하지 않으면 매번 전체 업데이트를 수행하므로 리소스가 낭비되므로 다음과 같이 구성하는 것이 좋습니다.
  • last_run_metadata_path: 마지막 업데이트 값의 저장 경로를 기록합니다.
  • use_column_value:true 또는false.true라면 부가가치 제어를 사용하고false는 시간 제어를 사용합니다..
  • tracking_column: 증분 업데이트를 제어하는 필드를 선택하십시오. 위의 예에서 update_time

  • output에서 Elasticsearch까지의 설정은 데이터 인덱스에서 Elasticsearch의 index, type, 문서의 id를 설정하는 것이 가장 좋다.다음은 간단한 구성입니다.
    output {
      elasticsearch {
      hosts => "localhost:9200"
      index => "my_index"
      document_type => "my_type"
      document_id => "%{id}"
      }
      stdout {
      codec => json_lines
      }
    }

    여기서 index는 데이터를 동기화할 때 저장할 인덱스입니다.document_type 저장할 type,document_id는 단일 문서로 저장된 id를 설정합니다.% {id}의 id는 sql 문장의 키 id 필드 이름에 대응하고 데이터도 컨트롤러로 출력합니다.다음은 내 구성입니다.
    input {
      jdbc {
        jdbc_driver_library => "/Users/tinybye/Documents/elk/logstash-5.0.1/lib/mysql-connector-java-5.1.10-bin.jar"
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/mysql_logstash"
        jdbc_user => "root"
        jdbc_password => "root"
        schedule => "* * * * *"
        statement => "SELECT id,name,age from person_table where update_time > :sql_last_value"
        last_run_metadata_path => "./logstash_jdbc_last_run"  
        use_column_value => false  
        tracking_column => "submit_time" 
      }
      jdbc {
        jdbc_driver_library => "/Users/tinybye/Documents/elk/logstash-5.0.1/lib/ojdbc6.jar"
        jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
        jdbc_connection_string => "jdbc:oracle:thin:test/test@//127.0.0.1:1521/orcl"
        jdbc_user => "test"
        jdbc_password => "test"
        schedule => "* * * * *"
        statement_filepath => "/Users/tinybye/Documents/elk/logstash-5.0.1/bin/logstash_sql/select.sql"
        last_run_metadata_path => "./logstash_jdbc_last_run_oracle"  
        use_column_value => false  
        tracking_column => "submit_time"
      }
    }
    
    # filter {
    
    # }
    
    output {
      elasticsearch {
      hosts => "localhost:9200"
      index => "mysql_logstash"
      document_type => "person"
      document_id => "%{id}"
      }
      stdout {
      codec => json_lines
      }
    }

    다음 명령을 실행하면 이전에 설정된 Elasticsearch에 데이터를 동기화할 수 있습니다.
    ./logstash -f logstash.conf

    참고문


    ELK 로그 분석 시스템 Logstash 사용 상세logstash-input-jdbc 동기화 원리 및 관련 문제 해독

    좋은 웹페이지 즐겨찾기