1. Twitter

 1) input 소스

input {  

    twitter {

        consumer_key => "CONSUMER_KEY_GOES_HERE"

        consumer_secret => "CONSUMER_SECRET_GOES_HERE"

        oauth_token => "ACCESS_TOKEN_GOES_HERE"

        oauth_token_secret => "ACCESS_TOKEN_SECRET_GOES_HERE"

        keywords => ["test","sample"]

        full_tweet => true

    }

}


 2) 참고링크

 - https://www.elastic.co/guide/en/logstash/current/plugins-inputs-twitter.html


2. Json_Line

 1) 설치

bin/logstash-plugin list json_line

./bin/logstash-plugin install logstash-codec-json_lines


 2) 소스

output {

  stdout { codec => json_lines }

}


 3) 참고링크

  - https://www.elastic.co/guide/en/logstash/current/plugins-codecs-json_lines.html#plugins-codecs-json_lines

  - https://github.com/logstash-plugins/logstash-codec-json_lines


3. RSS

 1) 설치

./logstash-plugin install logstash-input-rss


 2) 소스

input {

        rss {

                interval => 300

                url => "https://rss.itunes.apple.com/api/v1/kr/ios-apps/top-grossing/all/100/explicit.rss"

        }

}









1. Filter Mutate??

 - 데이터 변환


2. 기능

 - remove_field : 해당 필드 값들을 제거한다.

 - rename : 필드명을 변경한다.

 - 기타 여러 기능들이 있다. 아래 참고링크를 참고하면 좋다.


3. 예제

filter {

mutate {

remove_field => [

"@timestamp",

"@version"

]

rename => {

"TEST_VALUE" => "testValue"

}

}

}


* 참고 링크

 - https://www.elastic.co/guide/en/logstash/current/plugins-filters-mutate.html#plugins-filters-mutate-rename

1. conf파일 기본 형태

#데이터를 가지고옴.

input {

}


#데이터를 가공함.

filter {

}


#데이터를 출력함.

output {

}


2. mysql에서 데이터 가져와서 파일로 생성해보기.

 1) mysql-connector를 직접 다운받아, path를 지정해줘야함.

(1) connector 다운로드

wget 'https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.46.tar.gz'


 - 'https://dev.mysql.com/downloads/connector/j/' 링크를 통해서 직접 다운로드 받을 수도 있다.


(2) 압축풀기

tar -xvf ./mysql-connector-java-5.1.46.tar.gz


(3) 파일이동

  - 필요한 파일만 원하는 디렉토리로 이동

mv ./mysql-connector-java-5.1.46/mysql-connector-java-5.1.46.jar ./lib/mysql-connector-java-5.1.46.jar


(4) 불필요한 파일 삭제

rm -rf ./mysql-connector-java-5.1.46*


 * pwd 명령어를 사용하면 편하게 path를 가져올수있음.


 2) mysql로 input 사용

(1) plugin 확인

bin/logstash-plugin list jdbc


 - 없을 경우 install 해야한다.

bin/logstash-plugin install logstash-input-jdbc


(2) input conf

input {

  jdbc {

    jdbc_driver_library => "~/lib/mysql-connector-java-5.1.46.jar"

    jdbc_driver_class => "com.mysql.jdbc.Driver"

    jdbc_connection_string => "jdbc:mysql://localhost:3306/database_name?useUnicode=true&characterEncoding=utf8&useSSL=false"

    jdbc_user => "user_name"

    jdbc_password => "user_password"

    statement => "SELECT 1 FROM DUAL"

  }

}


 - 옵션설명(https://www.elastic.co/guide/en/logstash/6.2/plugins-inputs-jdbc.html)

옵션명 

기능 

비고 

 jdbc_driver_library

 mysql-connector 라이브러리 위치

 앞에서 다운받은 위치

 jdbc_driver_class

 드라이버 클래스

 Mysql : com.mysql.jdbc.Driver

 jdbc_connection_string Connect String 설정 
 jdbc_user

 계정명

 
 jdbc_password

 계정 비밀번호

 
 statement 

 조회하려는 쿼리

 SELECT 1 FROM DUAL


(3) 간단하게 확인하기 위해 json 형태로 출력하자

output {

  stdout { codec => json }

}


(4) 실행 확인

 - 문법확인도 함께 하려면 옵션에 -t 를 추가한다.

bin/logstash -f ~/sample.conf


 - 응답

[INFO ][logstash.inputs.jdbc     ] (0.041156s) SELECT 1 FROM DUAL

{"1":1,"@version":"1","@timestamp":"2018-03-22T07:44:43.471Z"}







1. Logstash란?

 - 입력(input), 필터(filter), 출력(output) 3단계로 구성되어 있고, 다양한 플러그인이 있어 여러 상황에서 사용하기 편함.

 - ex) 로그수집 등


2. Logstash 설치

 1) Centos 7기준

(1) java 설치 여부 확인

java -version


 - 아래와 같이 나오면 설치되어 있는 것이고, 아닐 경우 jdk 설치를 먼저 진행하세요.

java version "1.8.0_151"

Java(TM) SE Runtime Environment (build 1.8.0_151-b12)

Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)


(2) Logstash 다운로드

 - wget으로 받아야하므로, wget 설치 필요

wget 'https://artifacts.elastic.co/downloads/logstash/logstash-6.2.0.tar.gz'


 - 압축풀기

tar -xvf ./logstash-6.2.0.tar.gz


 - 링크설정

ln -s logstash-6.2.0 logstash


 - 다운받은 tar.gz 파일 삭제

rm -rf ./logstash-6.2.0.tar.gz


- 확인

logstash -e ‘input { stdin { } } output { stdout {} }’


3. Logstash 설정

- aws ec2를 프리티어로 사용할 경우나, 메모리가 부족할 경우에만 설정하세요.

 1) JVM 메모리 설정

vi ~/logstash/config/jvm.options


 2) config 수정

-Xms128m

-Xmx128m



4. 플러그인 

 1) 플러그인 리스트 확인

bin/logstash-plugin list

bin/logstash-plugin list --group input 


 2) 플러그인 설치

bin/logstash-plugin install #{플러그인명}


 3) 플러그인 업데이트

bin/logstash-plugin update 

bin/logstash-plugin update #{플러그인명}


 4) 전체플러그인 목록

(1) INPUT : 바로가기

(2) FILTER : 바로가기

(3) OUTPUT : 바로가기



* 참고페이지

 - https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html

 - https://www.elastic.co/guide/en/logstash/current/installing-logstash.html

1. 통계정보

curl http://localhost:9200/_stats?v&pretty=ture


2. index 정보

 - 전체 index 정보

curl http://localhost:9200/_cat/indices?v&pretty=true


 - {검색}으로 시작하는 index 정보

curl http://localhost:9200/_cat/indices/{검색}*?v&pretty


 - 전체 index 안에 type 정보

curl http://localhost:9200/_all/_mapping?pretty=true


- 해당 index 안에 type 정보

curl http://localhost:9200/{INDEX_NAME}/_mapping?pretty=true


3. Index 관리

 - index 삭제

curl -XDELETE 'http://localhost:9200/{INDEX_NAME}


1. not_analyzed

- contain 검색을 할거다.


2. wildcard

 - '*', '?'로 매칭할 수 있음.

 - '*' 은 SQL 에서 '%' 와 비슷하다.(all characters match)

 - SQL 예시 : SELECT * FROM {TABLE_NAME} where {컬럼} like '%{검색할 단어}%'

 - '?' 는 single character match

 - 주의사항 : '*', '?'를 첫 시작으로 사용하면 안됨.


 - 샘플

curl -XPOST http://localhost:9200/{테스트Index}/{테스트Type}/_search?pertty -d '{

"query" : {

"wildcard" : {

"{테스트 Field}": "*얍*"

}

}

}


* 참고

https://www.elastic.co/guide/en/elasticsearch/reference/current/term-level-queries.html

http://stackoverflow.com/questions/21161062/elasticsearch-wildcard-search-on-not-analyzed-field

http://m.blog.naver.com/parkjy76/30174434509


1. Index Create

$ curl -XPUT "http://localhost:9200/{인덱스 네임}?pretty=true" -d' '{

  "settings": {

    {설정 옵션(아래참고)}

  },

  "mappings": {

    {설정 옵션(아래참고)}

  }

}'


 1) settings 

(1) number_of_shards : Shard 개수

(2) number_of_replicas : Replica 개수

(3) index.refresh_interval : Index 변경 후 검색 결과에 반영되는 시간 설정

(4) analysis :analyzer와 tokenizer 설정

(5) store : 저장 옵션


 2) mappings

(1) field type (2.x)

  - string, number, boolean, date

  - ip


(2) attribute

 - index : 색인 방식 지정 (default : analyzed) -> 사용가능 옵션 : no, not_analyzed, analyzed

 - analyzer : 색인 및 검색시 사용할 Global analyzer

 - index_analyzer : 색인시 사용할 analyzer

 - search_analyzer : 검색시 사용할 analyzer


 * 지원하는 Analyzer


* 참고페이지

 - http://www.jopenbusiness.com/mediawiki/index.php?title=ElasticSearch_-_REST_API

 - https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-create-index.html

 - http://semode.tistory.com/30


 - field type 5.x 는 : https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html#_complex_datatypes

1. 개요

 - ElasticSearch를 사용하던 중 index mapping을 변경 해야하는 문제가 발생.

 - 재인덱싱(reindex)을 해야한다.

 - 데이터 양이 있어, 재인덱싱 시간이 길다.

 - ........

 - alias를 활용해 보자!


2. 기본작업

 1) Alias 만들기 

  - test_v1 이라는 index에 test라는 alias를 만든다.


curl -XPOST 'http://localhost:9200/_aliases' -d '

{

    "actions" : [

        { "add" : 

          { 

            "index" : "test_v1", 

            "alias" : "test" 

          } 

        }

    ]

}'


 2) Alias 확인

  - 호출

curl -XGET 'http://localhost:9200/test?pretty=true'


 - 결과 

{

  "test": {

    "aliases": {

      "test_v1": {}

    }

}


 3) Application

 - Application에서 바라보는 index를 alias로 만든 test로 변경한다.


3. 새롭게 작업할 index를 생성 작업 한다.


4. Alias를 변경한다.

curl -XPOST localhost:9200/_aliases -d '

{

    "actions": [

        { "remove": {

            "alias": "test",

            "index": "test_v1"

          }

        },

        { "add": {

            "alias": "test",

            "index": "test_v2"

            }

        }

    ]

}

'


5. Alias 확인

 - 호출

curl -XGET 'http://localhost:9200/test?pretty=true'


 - 결과

{

  "test": {

    "aliases": {

      "test_v2": {}

    }

}





* 시작전 필요사항

 - Elastic Stack에 대한 사전 지식

 - ElasticSearch가 설치되어 있어야함. ( https://www.google.co.kr/search?q=elasticsearch+install )

 - Logstash가 설치되어 있어야함. (https://www.google.co.kr/search?q=logstash+install)

 - Kibana가 설치되어 있어야함.(https://www.google.co.kr/search?q=kibana+install)


 - 해당 자료는 6.2.4 Set로 수정되었습니다.


1. 구성

  - ELB 로그를 S3에 저장한다.

  - Logstash로 간단하게 가지고와서, ElasticSearch에 넣는다.

  - Kibana로 간단하게 본다.


2. AWS Elb Log `ON`

 - AWS Console에서 쉽게 켤 수 있다.

 - https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/classic/access-log-collection.html

- 위에 S3 Location에 원하는 버킷 정보를 넣으면 된다.



3. Logstash Config 파일

 - config 파일



 - 실행 명령어

{LOGSTASH_PAHT}/logstash -f ''elb-access-logstash-conf.conf


4. ElasticSearch Index 확인하기

 - Rest API로 확인

curl -X GET 'http://localhost:9200/_cat/indices?v='


 - logstash-{날짜} 형태로 추가되어 있는지를 확인함.


5. Kibana 꾸미기

 1) Index Pattern 생성

  - Management에서 생성하면됨.

  - logstash-* 형태로 생성될 index들의 맵핑을 만들어 주면된다.


 2) Visualize 설정

  - 원하는 차트를 고르면된다.


  - Vertical Bar 로 표현할 예정



3) 차트 보기

 - 아래와 같이 설정하면 기본적인 차트를 볼 수 있음.

 - 필요한 형태로 변경하여 보면 됨.


6. 추가

 1) logstash로 생성한 모든 index 삭제

curl -X DELETE http://localhost:9200/logstash-%2A


 2) GeoIP

  - logstash Config 파일을 보면 Geoip 기능을 추가해놓음.

  - Map 으로 그려보면 재미남.


 3) 차트 꾸밀때 일정 설정...

  - 초기에 특정일자의 데이터만 수집해서 보는데, 데이터가 안나와서 삽질을 했다.

  - 시간을 최근 5분꺼만으로 세팅해놔서였다... 삽질하지말자!!



* 참고페이지

 - https://logz.io/blog/aws-elb-log-analysis/

 - https://medium.com/sharmin-anee/aws-elb-logs-from-s3-on-elk-stack-c463e2e2ec0

+ Recent posts