ElasticSearch + LogStash + Kibana + Redis 로 로그 관리 서비스 구축

9239 단어 kafka
http://nkcoder.github.io/blog/20141031/elkr-log-platform-deploy/
1. 로그 플랫폼 의 구조 설명도
설명:
  • 여러 개의 독립 된 에이전트 (Shipper) 는 서로 다른 소스 의 데 이 터 를 수집 하 는 것 을 책임 지고, 하나의 중심 에이전트 (Indexer) 는 데 이 터 를 모 으 고 분석 하 는 것 을 책임 지 며, 중심 에이전트 앞 에 있 는 Broker (redis 실현 사용) 는 버퍼 로 하고, 중심 에이전트 뒤의 Elastic Search 는 데 이 터 를 저장 하고 검색 하 는 데 사용 되 며, 전단 에 있 는 Kibana 는 풍부 한 도표 전 시 를 제공한다.
  • Shipper 는 로그 수집 을 표시 하고 LogStash 를 사용 하여 각종 소스 의 로그 데 이 터 를 수집 하 며 시스템 로그, 파일, redis, mq 등 이 될 수 있 습 니 다.
  • Broker 는 원 격 에이전트 와 중심 에이전트 간 의 버퍼 로 서 redis 를 사용 하여 이 루어 집 니 다. 하 나 는 시스템 의 성능 을 향상 시 킬 수 있 고 다른 하 나 는 시스템 의 신뢰성 을 향상 시 킬 수 있 습 니 다. 중심 에이전트 가 데 이 터 를 추출 하 는 데 실 패 했 을 때 데 이 터 는 redis 에 저장 되 어 잃 어 버 리 지 않 습 니 다.
  • 센터 에이전트 도 LogStash 로 Broker 에서 데 이 터 를 추출 하여 관련 분석 과 처리 (Filter) 를 수행 할 수 있 습 니 다.
  • ElasticSearch 는 최종 데 이 터 를 저장 하고 검색 기능 을 제공 합 니 다.
  • Kibana 는 간단 하고 풍부 한 웹 인터페이스 를 제공 합 니 다. 데 이 터 는 ElasticSearch 에서 나 왔 고 각종 조회, 통계 와 전 시 를 지원 합 니 다.

  • 2. 배치 구축
    환경:
  • 본 기기 (20.8.40.49) 에 배치: redis, 중심 에이전트 (LogStash), ElasticSearch 및 Kibana
  • 원 격 테스트 기 (20.20.79.75) 배치: 독립 에이전트 (LogStash)
  • Redis 버 전: 3.0.0 - rc1
  • LogStash 버 전;logstash-1.4.2
  • ElasticSearch 버 전: elasticsearch - 1.3.4
  • Kibana 버 전: kibana - 3.1.1
  • 2.1 배포 redis
    redis 단일 컴퓨터 인 스 턴 스 배치:
    $ wget https://github.com/antirez/redis/archive/3.0.0-rc1.tar.gz
    $ tar zxvf 3.0.0-rc1.tar.gz -C /usr/local
    

    redis. conf 설정 파일 은:
    include ../redis.conf
    daemonize yes 
    pidfile /var/run/redis_6379.pid
    port 6379
    logfile /opt/logs/redis/6379.log
    appendonly yes 
    

    시작:
    $ redis.server redis.conf
    

    ip 는 10.7.40.40 이 고 포트 는 6379 이다.
    2.2 배치 센터 LogStash
    다운로드 및 압축 풀기:
    $ wget https://download.elasticsearch.org/logstash/logstash/logstash-1.4.2.tar.gz
    $ tar zxvf logstash-1.4.2.tar.gz -C /usr/local/
    $ cd /usr/local/logstash-1.4.2
    $ mkdir conf logs
    

    설정 파일 conf / central. conf:
    input {
    	redis {
    		host => "127.0.0.1"
    		port => 6379 
    		type => "redis-input"
    		data_type => "list"
    		key => "key_count"
    	}   
    }
    
    output {
    	stdout {}
    	elasticsearch {
    		cluster => "elasticsearch"
    		codec => "json"
    		protocol => "http"
    	}   
    }
    

    시작:
    $ bin/logstash agent --verbose --config conf/central.conf --log logs/stdout.log
    

    프로필 은 redis 에서 입력 한 것 을 표시 합 니 다. redis 의 list 형식 으로 데 이 터 를 저장 합 니 다. key 는 "key" 입 니 다.count”;elasticsearch 에 출력 합 니 다. cluster 의 이름 은 "elasticsearch" 입 니 다.
    2.3 Elastic Search 배치
    다운로드 및 압축 풀기:
    $ wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.3.4.tar.gz
    $ tar zxvf elasticsearch-1.3.4.tar.gz -C /usr/local
    

    elasticsearch 는 기본 설정 을 사용 하면 됩 니 다. 기본 cluster name 은: elasticsearch 입 니 다.
    시작:
    $ bin/elasticsearch -d
    

    2.4 원 격 LogStash 배치
    배치 센터 LogStash 의 절차 와 유사 합 니 다. 설정 파일 만 다 르 면 새로운 설정 파일 로 시작 하면 됩 니 다.
    설정 파일 conf / shipper. conf 의 내용 은:
    input {
    	file {
    		type => "type_count"
    		path => ["/data/logs/count/stdout.log", "/data/logs/count/stderr.log"]
    		exclude => ["*.gz", "access.log"]
    	}   
    }
    
    output {
    	stdout {}
    	redis {
    		host => "20.8.40.49"
    		port => 6379
    		data_type => "list"
    		key => "key_count"
    	}   
    }
    

    설정 파일 은 디 렉 터 리 / data / logs / count / 아래 stdout. log 와 stderr. log 두 파일 을 입력 하고 이 디 렉 터 리 아래 의 모든. gz 파일 과 access. log 를 제외 합 니 다.(path 에 마스크 를 사용 하지 않 았 기 때문에 exclude 는 효과 가 없습니다);출력 은 감 청 된 이 벤트 를 redis 서버 에 보 내 고 redis 의 list 로 저장 합 니 다. key 는 "key" 입 니 다.count ", 여기 data_type 속성 과 key 속성 은 중심 에이전트 의 설정 과 일치 해 야 합 니 다.
    2.5 키 바 나 배치
    다운로드 및 설치:
    $ wget https://download.elasticsearch.org/kibana/kibana/kibana-3.1.1.tar.gz
    $ tar zxvf kibana-3.1.1.tar.gz 
    

    설정 파일 config. js 를 수정 하려 면 elasticsearch 의 주소 만 설정 하면 됩 니 다.
    elasticsearch: "http://20.8.40.49:9200"
    

    디 렉 터 리 kibana - 3.1.1 을 Jetty 의 webapp 디 렉 터 리 에 복사 하고 Jetty 를 시작 합 니 다.
    $ mv kibana-3.1.1 /usr/local/jetty-distribution-9.2.1.v20140609/webapps/
    $ bin/jetty start
    

    브 라 우 저 접근:
    http://20.8.40.49:8080/kibana-3.1.1/
    
  • 간단 한 테스트
  • LogStash 의 원 격 에이전트 와 센터 에이전트 로 그 를 엽 니 다:
    $ tail -f logs/stdout.log
    

    원 격 에이전트 의 데 이 터 는 rpush 작업 으로 이 벤트 를 redis 의 list 에 전송 합 니 다. 중심 에이전트 는 blpop 명령 을 통 해 redis 의 list 에서 데 이 터 를 추출 합 니 다. 따라서 테스트 시 데이터 양 이 적어 명령 llen key_count 을 통 해 되 돌아 오 는 결과 가 비어 있 을 수 있 습 니 다. 따라서 redis 의 데이터 흐름 변 화 를 관찰 하기 위해 사용 할 수 있 습 니 다 monitor 명령:
    $ redis-cli -p 6379 monitor
    

    현재, 우 리 는 / data / logs / count 디 렉 터 리 에 있 는 stdout. log 와 stderr. log 에 각각 데 이 터 를 보 냅 니 다.
    $ echo "stdout: just a test message" >> stdout.log
    $ echo "stderr: just a test message" >> stderr.log
    

    원 격 에이전트 와 센터 에이전트 는 이벤트 메 시 지 를 받 습 니 다. 예 를 들 어 원 격 에이전트 의 로 그 는 다음 과 같 습 니 다.
    {:timestamp=>"2014-10-31T09:30:40.323000+0800", :message=>"Received line", :path=>"/data/logs/count/stdout.log", :text=>"stdout: just a test message", :level=>:debug, :file=>"logstash/inputs/file.rb", :line=>"134"}
    {:timestamp=>"2014-10-31T09:30:40.325000+0800", :message=>"writing sincedb (delta since last write = 52)", :level=>:debug, :file=>"filewatch/tail.rb", :line=>"177"}
    ......
    {:timestamp=>"2014-10-31T09:30:49.350000+0800", :message=>"Received line", :path=>"/data/logs/count/stderr.log", :text=>"stderr: just a test message", :level=>:debug, :file=>"logstash/inputs/file.rb", :line=>"134"}
    {:timestamp=>"2014-10-31T09:30:49.352000+0800", :message=>"output received", :event=>{"message"=>"stderr: just a test message", "@version"=>"1", "@timestamp"=>"2014-10-31T01:30:49.350Z", "type"=>"type_count", "host"=>"dn1", "path"=>"/data/logs/count/stderr.log"}, :level=>:debug, :file=>"(eval)", :line=>"19"}
    

    redis 의 출력 을 관찰 할 수 있 습 니 다:
    1414714174.936642 [0 20.20.79.75:54010] "rpush" "key_count" "{\"message\":\"stdout: just a test message\",\"@version\":\"1\",\"@timestamp\":\"2014-10-31T00:10:04.530Z\",\"type\":\"type_count\",\"host\":\"dn1\",\"path\":\"/data/logs/count/stdout.log\"}"
    1414714174.939517 [0 127.0.0.1:56094] "blpop" "key_count" "0"
    1414714198.991452 [0 20.20.79.75:54010] "rpush" "key_count" "{\"message\":\"stderr: just a test message\",\"@version\":\"1\",\"@timestamp\":\"2014-10-31T00:10:28.586Z\",\"type\":\"type_count\",\"host\":\"dn1\",\"path\":\"/data/logs/count/stderr.log\"}"
    1414714198.993590 [0 127.0.0.1:56094] "blpop" "key_count" "0"
    

    elasticsearch 에서 다음 과 같은 간단 한 조 회 를 실행 합 니 다.
    $ curl 'localhost:9200/_search?q=type:type_count&pretty'
    {
      "took" : 3,
      "timed_out" : false,
      "_shards" : {
    	"total" : 6,
    	"successful" : 6,
    	"failed" : 0
      },
      "hits" : {
    	"total" : 2,
    	"max_score" : 0.5945348,
    	"hits" : [ {
    	  "_index" : "logstash-2014.10.31",
    	  "_type" : "type_count",
    	  "_id" : "w87bRn8MToaYm_kfnygGGw",
    	  "_score" : 0.5945348,
    	  "_source":{"message":"stdout: just a test message","@version":"1","@timestamp":"2014-10-31T08:10:04.530+08:00","type":"type_count","host":"dn1","path":"/data/logs/count/stdout.log"}
    	}, {
    	  "_index" : "logstash-2014.10.31",
    	  "_type" : "type_count",
    	  "_id" : "wwmA2BD6SAGeNsuYz5ax-Q",
    	  "_score" : 0.5945348,
    	  "_source":{"message":"stderr: just a test message","@version":"1","@timestamp":"2014-10-31T08:10:28.586+08:00","type":"type_count","host":"dn1","path":"/data/logs/count/stderr.log"}
    	} ]
      }
    }
    

    Kibana 웹 인터페이스 로 전환:http://20.8.40.49:8080/kibana-3.1.1
    4. 후속 작업
  • LogStash 의 Filter 를 사용 하여 로그 데 이 터 를 여과 하고 분석 합 니 다.
  • Redis 의 Cluster 모드 로 단기 모드 를 교체 합 니 다.
  • elasticsearch 에서 데 이 터 를 고급 분석 하고 조회 합 니 다.
  • Kibana 의 전시 구성 요소 와 문법 조회 에 익숙 합 니 다.
  • 좋은 웹페이지 즐겨찾기