'logstash'에 해당되는 글 38건

  1. 2015.10.27 [Filebeat] 가볍게 사용해 볼까요?
  2. 2015.09.09 [Elastic] Elastic 제품들...
  3. 2015.08.26 [Logstash] 플러그인 작성 시 register method.
  4. 2015.08.25 [Logstash] logstash input telnet plugin.
  5. 2015.07.29 [Logstash] logstash 개발 및 디버그 시 유용한 설정
  6. 2015.03.11 로그생성 프로그램 - makelogs
  7. 2014.01.22 [elasticsearch] logstash 간단 테스트.
  8. 2013.05.22 [검색일반] elasticsearch + logstash + kibana

[Filebeat] 가볍게 사용해 볼까요?

Elastic/Beats 2015. 10. 27. 15:13
filebeat 가 릴리즈 되었습니다.
▶ elastic blog : https://www.elastic.co/blog/weekly-beats-first-filebeat-release

GA 버전은 아니고 beta4 이지만 그래도 의미 있는 릴리즈이기 때문에 소식을 전하지 않았나 싶습니다.

여기서는 가볍게 FEL (Filebeat + Elasticsearch + Logstash) 구성으로 /var/log 아래 파일로그에 대한 수집과 색인까지 살펴 보도록 하겠습니다.


Kibana를 이용한 dashboard 구성은 제가 직접 만들면 되는데 귀찮아서 그냥 이건 skip 하도록 하겠습니다.

기본적으로 elastic에서 제공하고 있는 dashboard sample 데이터가 있으니 참고 하시면 좋을 것 같습니다.

(2015.10.27일 기준으로 filebeat 는 등록되어 있지 않습니다.)


▶ elastic reference : https://www.elastic.co/guide/en/beats/libbeat/current/getting-started.html#load-kibana-dashboards


curl -L -O http://download.elastic.co/beats/dashboards/beats-dashboards-1.0.0-beta4.tar.gz

tar xzvf beats-dashboards-1.0.0-beta4.tar.gz

cd beats-dashboards-1.0.0-beta4/

./load.sh


[FEL Architecture]

기본적인 아키텍쳐링은 elastic 문서에 잘 나와 있습니다.



[Filebeat 란?]

filebeat는 기본적으로 logstash forwarder를 기반으로 만들어 졌습니다.

개별 노드에 agent 형태로 설치가 되어 동작 하게 되며, log directories or specific log files, tails the files 에 대해서 elasticsearch로 색인하게 됩니다.


참고 문서)

* "logstash-forwarder" : https://github.com/elastic/logstash-forwarder

* "libbeat platform" : https://www.elastic.co/guide/en/beats/libbeat/current/index.html


[Filebeat 설치]

※ 개발 장비로 macbook 을 사용중이기 때문에 mac 기준으로 작성 합니다.


Step 1) 다운로드를 받고 압축을 해제 합니다.

다운로드 링크 : https://www.elastic.co/downloads/beats/filebeat

$ tar -xvzf filebeat-1.0.0-beta4-darwin.tgz

$ cd filebeat-1.0.0-beta4-darwin

$ vi filebeat.yml


Step 2) filebeat.yml 설정
 filebeat configure : https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-configuration-details.html
filebeat도 elasticsearch와 마찬가지로 잘 모르면 기본 설정으로 사용 하시면 됩니다.
기본적으로 설정 하셔야 하는 값들은 "paths", "log", "elasticsearch", "logstash" 설정입니다.

...중략...
      paths:
        - /var/log/*.log

      type: log
...중략...
output:

  ### Elasticsearch as output
  elasticsearch:

    # Set to true to enable elasticsearch output
    enabled: false

...중략...

  logstash:

    # Uncomment out this option if you want to output to Logstash. The default is false.

    enabled: true


    # The Logstash hosts

    hosts: ["localhost:5044"]

...중략...


※ 여기서 elasticsearch.enabled: false 로 하는 것은 F -> L -> E 구조로 사용하기 위해서 입니다.


 filebeat logstash output configure : https://www.elastic.co/guide/en/beats/libbeat/master/configuration.html#logstash-output


Step 3) dynamic template 설정

이 설정은 logstash를 사용해 보신 분이라면 어떤 용도인지 잘 아실거라고 생각 합니다.

짧게 설명 드리면 dynamic mapping에 의한 특정 index 패턴에 사전 mapping 구성을 통해 생성되는 field의 특성을 pre-define 하는 설정을 하는 것입니다.


$ curl -XPUT 'http://localhost:9200/_template/filebeat?pretty' -d@filebeat.template.json

※ filebeat.template.json 파일은 압축 해제 하신 경로에 포함되어 있습니다.


Step 4) filebeat 실행

※ elasticsearch와 logstash를 먼저 실행 시켜 둔 후 아래 명령어로 실행 합니다.


$ sudo ./filebeat -e -c filebeat.yml -d "publish"


[Logstash 구성]

  1. filebeat 데이터를 받아 줄 logstash를 구성 합니다.
  2. logstash 1.5.4 이상
  3. beats plugin 설치
    $ bin/plugin install logstash-input-beats

[Filebeat용 logstash config 생성]

아래 설정은 libbeat reference 문서에 자세히 나와 있습니다.

 libbeat reference : https://www.elastic.co/guide/en/beats/libbeat/current/getting-started.html

input {

  beats {

    port => 5044

  }

}


output {

  elasticsearch {

    host => "localhost"

    port => "9200"

    protocol => "http"

    index => "%{[@metadata][index]}"

    document_type => "%{[@metadata][type]}"

  }

}


아래 그림은 제 맥북에서 실행 시킨 명령어 스크린샷 입니다.



logstash) bin/logstash -f conf/filebeat.config

filebeat) sudo ./filebeat -e -c filebeat.yml -d "publish"

kibana) bin/kibana

elasticsearch) bin/elasticsearch


간단하게 요약을 하면 이렇습니다.)


1. 수집 할 대상 서버에 filebeat 를 설치하고 실행 합니다.

2. logstash input beat 를 실행하고 output 으로 elasticsearch로 색인 되도록 합니다.

3. elasticsearch에 적재된 로그를 기반으로 kibana에서 dashboard를 구성 합니다.


:

[Elastic] Elastic 제품들...

Elastic 2015. 9. 9. 10:30

Elasticsearch, Logstash, Kibana 를 주로 사용하고 있다 보니 다른 제품들은 크게 관심있게 보지를 않았습니다.

제가 관심 있게 보는건 저 한테 필요 하거나 오픈소스 이거나 인데요.

당연히 위에 제품들은 모두 제가 사용하고 있는 것들이고 오픈소스 입니다.


Elastic 에서 제공하고 있는 제품들은 아래 링크를 통해서 확인 하시면 되는데요.


제품 소개 링크) https://www.elastic.co/products


최근까지 제가 잘 못 알고 있던 제품이 있었는데 이것도 한번 사용해 보기 위해 elastic 제품들을 각각 한 줄로 정리해 보기로 했습니다.


Elasticsearch - 오픈소스 무료

루씬 기반의 분산 검색 엔진 입니다.


Logstash - 오픈소스 무료

다양한 input/filter/ouput/codec 들을 제공하는 collector 입니다.


Kibana - 오픈소스 무료

elasticsearch를 DB로 사용하는 visualization/dashboard 도구 입니다.


Packet Beat - 오픈소스 무료

OS 또는 Process 등에서 발생 하는 network 모니터링 도구 입니다.


Top Beat - 오픈소스 무료

기본적인 시스템(CPU, MEM, IO, DISK) 모니터링 도구 입니다.


Elasticsearch Hadoop Plugin - 오픈소스 무료

Hadoop component 들과 elasticsearch를 쉽게 연동 할 수 있도록 도와 주는 라이브러리 입니다.


Found - SaaS 형 서비스 유료

Cloud 환경에서 ELK 를 쉽게 구축하고 사용할 수 있도록 해주는 서비스 입니다.


Shield - 유료

ELK를 이용하여 기업에서 사용하기에는 부족했던 인증, 권한 등의 기능을 제공해 주는 제품 입니다.


Watcher - 유료

ELK를 이용하면서 아쉬웠던 alert 이나 notification 에 대한 기능을 제공해 주는 제품 입니다.


Marvel - 유료 (개발자 버전은 무료)

Elasticsearch에 대한 관리 및 모니터링을 제공하는 제품 입니다.


저는 기본적으로 ELK 기반으로 필요한건 다 만들어서 사용을 하고 있는 편입니다.

beats 도 역시 만들어서 사용하고 있었는데요. 

이건 한번 시도를 해봐야 겠내요. :)

:

[Logstash] 플러그인 작성 시 register method.

Elastic/Logstash 2015. 8. 26. 11:53

플러그인을 처음 만들다 보면 필요 없겠다 싶은 코드를 별 생각 없이 지우게 되는 경우가 있습니다.

일단 먼저 실행에 옮기는 잘못으로 인해서 오류를 경험 하게 되는데요.

저 역시 비슷한 실수를 해서 또 하지 말자는 의미로 공유해 봅니다.


기본적으로 생성된 플러그인을 등록하는 과정이 코드 상에 포함이 되어 있어야 합니다.

이런 등록 관련 코드가 없다면 아래의 에러 메시지를 경험 하게 됩니다.


[logstash 실행 시 에러 메시지]

The error reported is:

  LogStash::Inputs::Telnet#register must be overidden


해당 문구는 base.rb 에 들어 있습니다.

  def register
    raise "#{self.class}#register must be overidden"
  end # def register


이 에러 메시지는 구현한 플러스인에 register 함수가 없기 때문에 발생 하는 것입니다.

아래는 logstash-input-example 플러그인에 포함된 코드입니다.

  def register

      @host = Socket.gethostname

  end # def register


제가 한 실 수는 @host 정보가 필요 없어서 저 register method 부분을 몽땅 삭제 한 것입니다.

다른 분들은 이 같은 초딩같은 실수는 하지 마시길 바랍니다. ^^;

:

[Logstash] logstash input telnet plugin.

Elastic/Logstash 2015. 8. 25. 17:18

logstash 에 telnet input 플러그인이 없어서 그냥 간단하게 만들었습니다.

용도는 특정 ip(hostname), port 들을 대상으로 잘 떠 있는지 점검하기 위함 입니다. :)


필요 하신 분들은 참고 하세요.

(빌드 된거 받아서 설치 하셔도 되고, 소스코드 받아서 빌드 한 신 후 사용하셔도 되고 그렇습니다.)


[파일 다운로드]


[git repository]

https://github.com/howookjeong/logstash-input-telnet


[run config]

bin/logstash -e '

  input {

    telnet{

      daemons => "localhost:9200|localhost:9301"

      interval => "60"

    }

  }


  output {stdout { codec => rubydebug }}

'


[rubydebug]

{

          "host" => "localhost",

          "port" => "9200",

       "message" => "success",

      "@version" => "1",

    "@timestamp" => "2015-08-25T07:06:30.128Z"

}

{

          "host" => "localhost",

          "port" => "9301",

       "message" => "failure",

      "@version" => "1",

    "@timestamp" => "2015-08-25T07:06:30.132Z"

}

※ 메시지 보시면 아시겠지만 정상인건 "success" 로 비정상인건 "failure" 로 나옵니다.

:

[Logstash] logstash 개발 및 디버그 시 유용한 설정

Elastic/Logstash 2015. 7. 29. 17:32

제목 쓰기가 참 어렵내요.

logstash를 많이 사용해 보신 분들은 다들 잘 아실 것 같습니다.


저 같은 경우 output 은 거의 elasticsearch를 사용하고 있기 때문에 개발 시 디버깅을 위해서 아래 설정을 많이 이용합니다.


[디버그용 설정]

input {

  http {

    port => 8080

    codec => json_lines {}

  }

}


output {

  stdout {

    codec => rubydebug

  }

}


[디버그용 로그 스태쉬 실행]

$ bin/logstash -e "input { http { port => 8080 codec => json_lines {} } } output { stdout { codec => rubydebug } }"


잘 아시겠지만 output 은 여러개를 지정해 줄 수 있습니다.

실제 elasticsearch로도 색인을 하고 싶으시다면 아래와 같이 하시면 되겠죠.


[ouput - elasticsearch + stdout]

output {

  elasticsearch {

    cluster => "xxxxxx"

    bind_host => "localhost"

    bind_port => "9300"

    protocol => "transport"

    index => "logstash-%{+YYYY.MM.dd}"

  }

  stdout {

    codec => rubydebug

  }

}


:

로그생성 프로그램 - makelogs

Elastic/Logstash 2015. 3. 11. 16:35

logstash에서 제공하는 generator가 쓸만하지 않아서 아래 도구 사용합니다.


[링크]

https://www.npmjs.com/package/makelogs


to install

npm install -g makelogs
makelogs --count=10m --days=-2,+10


[Command Help]

jeong-ui-MBP:makelogs hwjeong$ makelogs --help

A utility to generate sample log data.


Usage: makelogs [options]


Options:

  --count, -c     Total event that will be created, accepts expressions like "1m" for 1 million (b,m,t,h)       [default: 14000]

  --days, -d      The number of days ± today or two numbers, seperated by a comma, like "-1,+10" or "-10,+100"  [default: 1]

  --host, -h      The host name and port                                                                        [default: "localhost:9200"]

  --auth          user:password when you want to connect to a secured elasticsearch cluster over basic auth     [default: null]

  --shards, -s    The number of primary shards                                                                  [default: 1]

  --replicas, -r  The number of replica shards                                                                  [default: 0]

  --dry           Test/Parse your arguments, but don't actually do anything                                     [default: false]

  --help          This help message

  --reset         Clear all logstash-* indices before genrating logs

  --verbose       Log more info to the console

  --trace         Log every request to elastisearch, including request bodies. BE CAREFULL


[예제]

makelogs -c 100 -d 0 -h localhost:9200 -s 1 -r 0 --reset

makelogs -c 100 --days=-1,+1 -h localhost:9200 -s 1 -r 0 --reset


설명) -d 0 는 오늘 날짜 기준으로 데이터 생성

logstash-20150311


설명) --days=-1,+1 은 오늘 날짜 기준으로 앞뒤로 하나씩 인덱스를 더 생성

logstash-20150310

logstash-20150311

logstash-20150312

:

[elasticsearch] logstash 간단 테스트.

Elastic/Elasticsearch 2014. 1. 22. 17:25

참고 URL : http://www.elasticsearch.org/overview/logstash/


data.json 파일에 라인 단위로 로그가 쌓이게 되면 이벤트를 받아서 elasticsearch 로 저장 하게 됩니다.

json format 이기 떄문에 당연히 field:value 형태로 저장됩니다.


[실행]

java -jar logstash-1.3.3-flatjar.jar agent -f logstash-elasticsearch.conf -v


[실행 + 웹UI]

java -jar logstash-1.3.3-flatjar.jar agent -f logstash-elasticsearch.conf -v -- web

※ 이렇게 실행 하면 kibana 를 별도로 설치 하지 않으셔도 됩니다.

※ 샘플 데쉬보드 : http://192.168.0.120:9292/index.html#/dashboard/file/guided.json


[logstash-elasticsearch.conf]


input {
    file {
        path => "/server/app/logstash/log/data.json"
        codec => json
        start_position => "beginning"
    }
}

output {
    stdout { debug => true debug_format => "json"}

    elasticsearch_http {
        host => "192.168.0.120"
        port => 9200
    }
}


※ output 부분에서 stdout 에 설정된 값은 -v 옵션 주고 실행시켰을 때 디버그 메시지를 찍기 위해서 설정 된 것입니다.


[input file]

http://logstash.net/docs/1.3.3/inputs/file

input {
  file {
    add_field => ... # hash (optional), default: {}
    codec => ... # codec (optional), default: "plain"
    debug => ... # boolean (optional), default: false
    discover_interval => ... # number (optional), default: 15
    exclude => ... # array (optional)
    path => ... # array (required)
    sincedb_path => ... # string (optional)
    sincedb_write_interval => ... # number (optional), default: 15
    start_position => ... # string, one of ["beginning", "end"] (optional), default: "end"
    stat_interval => ... # number (optional), default: 1
    tags => ... # array (optional)
    type => ... # string (optional)
}

}


[output elasticsearch_http]

http://logstash.net/docs/13.3/outputs/elasticsearch_http

output {
  elasticsearch_http {
    codec => ... # codec (optional), default: "plain"
    document_id => ... # string (optional), default: nil
    flush_size => ... # number (optional), default: 100
    host => ... # string (required)
    idle_flush_time => ... # number (optional), default: 1
    index => ... # string (optional), default: "logstash-%{+YYYY.MM.dd}"
    index_type => ... # string (optional)
    manage_template => ... # boolean (optional), default: true
    password => ... # password (optional), default: nil
    port => ... # number (optional), default: 9200
    replication => ... # string, one of ["async", "sync"] (optional), default: "sync"
    template => ... # a valid filesystem path (optional)
    template_name => ... # string (optional), default: "logstash"
    template_overwrite => ... # boolean (optional), default: false
    user => ... # string (optional), default: nil
    workers => ... # number (optional), default: 1
}

}


output plugin 에 보면 elasticsearch 도 있는데 이건 테스트 해보니 이미 설치되어 실행 중인 elasticsearch 와 연동하는데 문제가 있는 것 같습니다.

문서 보면 되는 것 처럼 나와 있는데 일단 실패해서 elasticsearch_http 를 이용했습니다.


:

[검색일반] elasticsearch + logstash + kibana

Elastic/Elasticsearch 2013. 5. 22. 17:47

로그를 수집해서 색인을 하고 검색 결과에 대한 분석 서비스가 나왔내요.

splunk 랑 비슷한 역할을 하는 오픈 소스라 elasticsearch 와 잘 조합해서 사용을 하면 splunk 보다 더 좋은 오픈소스 플랫폼이 나오지 않을까 싶내요.


[오픈소스 링크]

https://github.com/elasticsearch/kibana

http://logstash.net/

https://github.com/elasticsearch/elasticsearch


[주의사항]

index name format : logstash-yyyy.mm.dd

@timestamp : es datetime format

: