김현복자료

Homebrew를 이용한 ELK 설치

준비 작업

  • Homebrew 업데이트
$ sudo brew update
  • homebrew default 설치 경로 : /usr/local/homebrew/Cellar

Elasticsearch 설치

## 설치 명령어
$ sudo brew install elasticsearch
## 실제 설치 경로 링크 만들기 (자동으로 bin에 명령어는 등록이 된다.)
$ cd ~
$ ln -s /usr/local/homebrew/Cella/elasticsearch/2.3.3/libexec elasticsearch
## head 플러그인 설치
$ ./elasticsearch/bin/plugin -install mobz/elasticsearch-head
## 실행
$ elasticsearch
[2016-06-20 17:08:32,731][INFO ][node                     ] [devswag-1] version[2.3.3], pid[18717], build[218bdf1/2016-05-17T15:40:04Z]
[2016-06-20 17:08:32,735][INFO ][node                     ] [devswag-1] initializing ...
[2016-06-20 17:08:33,504][INFO ][plugins                  ] [devswag-1] modules [reindex, lang-expression, lang-groovy], plugins [head], sites [head]
[2016-06-20 17:08:33,532][INFO ][env                      ] [devswag-1] using [1] data paths, mounts [[/ (/dev/disk0s3)]], net usable_space [47gb], net total_space [230gb], spins? [unknown], types [hfs]
[2016-06-20 17:08:33,533][INFO ][env                      ] [devswag-1] heap size [990.7mb], compressed ordinary object pointers [true]
[2016-06-20 17:08:33,533][WARN ][env                      ] [devswag-1] max file descriptors [10240] for elasticsearch process likely too low, consider increasing to at least [65536]
[2016-06-20 17:08:35,868][INFO ][node                     ] [devswag-1] initialized
[2016-06-20 17:08:35,868][INFO ][node                     ] [devswag-1] starting ...
[2016-06-20 17:08:35,973][INFO ][transport                ] [devswag-1] publish_address {localhost/127.0.0.1:9300}, bound_addresses {127.0.0.1:9300}, {[::1]:9300}, {[fe80::1]:9300}
[2016-06-20 17:08:35,978][INFO ][discovery                ] [devswag-1] elasticsearch_root/TM-mlEdmSGCzuja3OdTP1w
[2016-06-20 17:08:39,023][INFO ][cluster.service          ] [devswag-1] new_master {devswag-1}{TM-mlEdmSGCzuja3OdTP1w}{127.0.0.1}{localhost/127.0.0.1:9300}, reason: zen-disco-join(elected_as_master, [0] joins received)
[2016-06-20 17:08:39,036][INFO ][http                     ] [devswag-1] publish_address {localhost/127.0.0.1:9200}, bound_addresses {127.0.0.1:9200}, {[::1]:9200}, {[fe80::1]:9200}
[2016-06-20 17:08:39,036][INFO ][node                     ] [devswag-1] started
.
.
.

logstash 설치

### 설치 명령어
$ sudo brew install logstash
### 실제 설치 경로 링크 만들기
$ cd ~
$ ln -s /usr/local/homebrew/Cella/logstash/2.3.2/libexec logstash
###log 설정 파일 작성
$ cd logstash
$ mkdir confs
$ cd confs
$ vi logstash_apache.conf
input {
    file {
        path => "/var/log/apache2/access_log"
    } 
}

filter {
    if [path] =~ "access" {
        mutate { replace => { "type" => "apache_access" } }
        grok {
            match => { "message" => "%{COMMONAPACHELOG}" }
        }
    }
    date {
        match => [ "timestamp", "dd/MMM/yyyy:hh:mm:ss Z" ]
    }
}

output {
    elasticsearch {
        hosts => ["localhost:9200"]
    }
    stdout { codec => rubydebug }
}
### bin에 따로 등록이 안되기에 풀경로를 이용하여 실행하였다.
$ /Users/k12378/logstash/bin/logstash -f /Users/k12378/logstash/confs/logstash_apache.conf
Settings: Default pipeline workers: 4
Pipeline main started
.
.
.

Kibana 설치

  • Homebrew 버그로 인해 설치 NPM 4.4.X 모듈 설치중 계속 오류가 발생한다. 그래서 키바나는 수동으로 설치를 진행하였다. ( 다운로드 URL : )
### 다운로드 파일을 옮겨 압축풀기
$ cp ~/Downloads/kibana-4.5.1-darwin-x64.tar.gz /usr/local/
$ cd /usr/local
$ tar -zxvf ./kibana-4.5.1-darwin-x64.tar.gz
### 실제 설치 경로 링크 만들기
$ cd ~
$ ln -s /usr/local/kibana-4.5.1-darwin-x64 kibana
## 실행
$ ./kibana/bin/kibana
$ ./kibana
  log   [09:33:56.926] [info][status][plugin:kibana] Status changed from uninitialized to green - Ready
  log   [09:33:56.967] [info][status][plugin:elasticsearch] Status changed from uninitialized to yellow - Waiting for Elasticsearch
  log   [09:33:56.994] [info][status][plugin:kbn_vislib_vis_types] Status changed from uninitialized to green - Ready
  log   [09:33:56.999] [info][status][plugin:markdown_vis] Status changed from uninitialized to green - Ready
  log   [09:33:57.009] [info][status][plugin:metric_vis] Status changed from uninitialized to green - Ready
  log   [09:33:57.017] [info][status][plugin:spyModes] Status changed from uninitialized to green - Ready
  log   [09:33:57.022] [info][status][plugin:statusPage] Status changed from uninitialized to green - Ready
  log   [09:33:57.034] [info][status][plugin:table_vis] Status changed from uninitialized to green - Ready
  log   [09:33:57.043] [info][status][plugin:elasticsearch] Status changed from yellow to green - Kibana index ready
  log   [09:33:57.046] [info][listening] Server running at http://localhost:5601
  .
  .
  .

GC log

자바 계열 별 GC Log 생성 옵션

Sun Java Minor GC Log 포맷

 1 : GC 발생 시간 정보입니다. GC 발생 후 다음 GC가 발생할 때까지의 시간 GAP을 확인할 수 있습니다.
 2 : GC의 영역을 표시합니다. DefNew는 Young 영역 GC를 표시합니다.
 3 : GC 수행 전 Young 영역 사용량입니다.
 4 : GC 수행 후 Young 영역 사용량입니다.
 5 : Young 영역 전체 크기입니다.
 6 : Minor GC 수행에 걸린 시간입니다.
 7 : GC 전 전체 Heap 사용량입니다.
 8 : GC 후 전체 Heap 사용량입니다.
 9 : Heap 영역 전체 크기입니다.
 10 : 전체 GC 수행에 걸린 시간입니다.

Sun Java Major GC Log

1 : GC 발생 시간 정보입니다. GC 발생 후 다음 GC가 발생할 때까지의 시간 GAP을 확인할 수 있습니다.
2 : GC 유형을 표시합니다. Full GC가 수행되었음을 표시합니다.
3 : Tenured (Old) 영역의 GC 수행 전후의 사용량과 전체 Tenured 영역의 크기 및 GC 수행에 걸린 시간을 표시합니다.
4 : GC 수행 전후의 전체 Heap 사용량 및 전체 Heap 크기를 표시합니다.
5 : GC 수행 전후의 Perm 영역의 사용량 표시 및 전체 Perm 영역의 크기를 표시합니다.
6 : 전체 GC 수행에 걸린 시간을 표시합니다.

HP Java GC Log

참고 자료( 본부장님 발표 자료 ) : https://drive.google.com/open?id=0B502ENAMt-prbnM3U1RDUGJwRGs

출처 : http://blog.naver.com/PostView.nhn?blogId=bumsukoh&logNo=110119881124&categoryNo=22&viewDate=&currentPage=1&listtype=0

RemoteCall GC Log Sample

convert binery to String

2016-06-29T03:50:19.364+0000: 519685.428: [GC [PSYoungGen: 2437216K->6304K(2439168K)] 4597898K->2167530K(7332864K), 0.0498910 secs] [Times: user=0.11 sys=0.00, real=0.05 secs] 
2016-06-29T03:52:36.334+0000: 519822.398: [GC [PSYoungGen: 2438304K->5792K(2439680K)] 4599530K->2167578K(7333376K), 0.0432130 secs] [Times: user=0.11 sys=0.00, real=0.04 secs] 
2016-06-29T03:54:46.878+0000: 519952.941: [GC [PSYoungGen: 2437792K->6272K(2439168K)] 4599578K->2168522K(7332864K), 0.0448720 secs] [Times: user=0.10 sys=0.00, real=0.05 secs] 
2016-06-29T03:57:09.045+0000: 520095.109: [GC [PSYoungGen: 2438272K->5344K(2439680K)] 4600522K->2168482K(7333376K), 0.0449600 secs] [Times: user=0.11 sys=0.00, real=0.04 secs] 
2016-06-29T03:59:20.254+0000: 520226.317: [GC [PSYoungGen: 2437856K->7040K(2439680K)] 4600994K->2170538K(7333376K), 0.0448770 secs] [Times: user=0.11 sys=0.00, real=0.05 secs] 
2016-06-29T04:02:01.130+0000: 520387.193: [GC [PSYoungGen: 2439552K->7136K(2436608K)] 4603050K->2172282K(7330304K), 0.0655850 secs] [Times: user=0.11 sys=0.00, real=0.07 secs] 
2016-06-29T04:04:44.174+0000: 520550.238: [GC [PSYoungGen: 2436576K->7232K(2438144K)] 4601722K->2173506K(7331840K), 0.0485150 secs] [Times: user=0.10 sys=0.01, real=0.06 secs] 
2016-06-29T04:07:16.963+0000: 520703.027: [GC [PSYoungGen: 2436672K->6624K(2438144K)] 4602946K->2173754K(7331840K), 0.0466770 secs] [Times: user=0.10 sys=0.00, real=0.04 secs] 
2016-06-29T04:09:49.050+0000: 520855.114: [GC [PSYoungGen: 2436064K->7616K(2438144K)] 4603194K->2175218K(7331840K), 0.0480610 secs] [Times: user=0.10 sys=0.01, real=0.05 secs] 
2016-06-29T04:12:37.193+0000: 521023.256: [GC [PSYoungGen: 2437056K->7072K(2438144K)] 4604658K->2175346K(7331840K), 0.0482880 secs] [Times: user=0.11 sys=0.00, real=0.05 secs] 
2016-06-29T04:14:45.176+0000: 521151.240: [GC [PSYoungGen: 2436512K->8496K(2438144K)] 4604786K->2177242K(7331840K), 0.0525550 secs] [Times: user=0.11 sys=0.00, real=0.05 secs]

Elasticsearch 설정 파일

cluster.name: test_cluster
- 클러스터 명 지정. 설정하지 않으면 기본 설정으로 Elasticsearch를 띄우는 모든 노드가 의도치않게 같이 묶임.

node.name: test_node01 
- 노드명 설정. 설정하지 않으면 Elasticsearch가 적당한 이름을 지어줌.

node.max_local_storage.nodes: 1  
- 노드 수 지정. 기본적으로 Elasticsearch 프로세스 수 만큼 같은 서버에서 여러 노드를 띄울 수 있다.  
- production에서는 이 값을 1로 주어 한 서버에 하나의 노드만 띄우도록 한다.

path.data: /mnt/elasticserach/data  
- 각 샤드의 파일들이 저장될 위치를 지정. 여러개를 지정해서 software RAID0 처럼 이용할 수 있다.

path.logs: /mnt/elasticsearch/log  
- 로그 역시 기본 저장 위치 지정. 기본적으로 날짜별로 로그가 나뉘어지기는 하나 rotating이 되지는 않는다.  
- 디스크 공간을 위해서는 오래된 로그를 지워줄 필요가 있다.

bootstrap.mlockall: true  
- 메모리 swap 방지를 위한 옵션 설정.  
- >> curl localhost:9200/_nodes/process?pretty 호출로 설정이 잘 되었는지 확인
  - 확인 결과 false 로 나온다면 max locked memory 값이 작기 때문일 것이다.  
    - >> ulimit -l unlimited OS에서 직접 설정
    - /etc/init.d/elasticsearch 에서 MAX_LOCKED_MEMORY 값을 unlimited로 설정

http.port: 12345  
- 기본값은 9200이고, 포트 설정

discovery.zen.ping.multicast.enabled: false  
- production에서는 multicast의 단점이 많으니 false로 끄고 unicast를 사용하도록 한다.

discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]  
- unicast에서는 클러스터를 찾기 위해 적어도 하나의 노드에 대한 host 정보를 입력한다.  
- 첫 노드일 경우에는 입력하지 않아도 된다.

action.auto_create_index: true  
- [create index API](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-create-index.html)를 사용해서 인덱스를 생성하지 않았더라도 첫 document를 받을 때 자동으로 인덱스를 만들어주는 옵션이다. 기본값은 켜져 있다.

index.mapper.dynamic: true  
- [put mapping API](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-put-mapping.html)를 사용하지 않았더라도 자동으로 field type mapping을 만들어주는 옵션이다. 기본값은 켜져 있다.

action.disable_delete_all_indices: true  
- >> curl -XDELETE 'http://localhost:9200/_all/' 를 통해 모든 인덱스를 삭제하는 것을 막는다.

indices.fielddata.cache.size: 75%  
- fielddata cache는 주로 sorting이나 aggregation에 사용된다.  
- 이 작업은 모든 field value가 메모리에 올라가게 되므로 꽤 expensive하여 `기본값은 unbounded`로 설정되어있다.
- 하지만 이 값이 아래의 indices.breaker.fielddata.limit 보다 크게 되면 너무 큰 데이터 작업 시에 CircuitBreakingException이 발생하게 된다.
- 또한, 이 값은 서버 재시작을 해야 적용이 되므로 처음에 띄울 때 적절한 값을 줄 필요가 있다.
- 75% 라고 정하면 JVM heap의 75%를 의미하게 되고, 절대값으로 12GB 처럼 줄 수도 있다.

indices.fielddata.cache.expire: -1
- fielddata cache 만료를 5m과 같은 식으로 지정해 줄 수 있는 옵션인데 기본값은 -1로 사용하지 않는 것으로 설정되어있다.
- 공식 문서에서는 이 옵션은 끔찍한 성능 저하만 주는 절대 사용하지 말아야 할 옵션으로 규정하고 있다. 사용하지 말자.

indices.breaker.fielddata.limit: 77%
- circuit breaker는 OutOfMemory Error를 막기 위해 메모리를 얼만큼 사용할 지를 정의하는 기능이다.
- 1.4.0beta1 이전에는 fielddata circuit breaker만 있었으나 이후에 request circuit breaker가 추가되었다.
- `기본값은 60%`이고, indices.fielddata.cache.size 보다 크도록 설정해야한다.

indices.breaker.request.limit: 50%
- request circuit breaker는 request마다 aggregation 등의 data structure가 사용할 메모리의 양을 제한하는 기능이다.
- Elasticsearch의 heap은 바로 위의 fielddata와 이 request circuit breaker, 그 외에 인덱싱 메모리 버퍼, filter cache, 열려있는 인덱스에 사용되는 Lucene data structure 등등 다양한 요소와 공유가 되므로 이 circuit breaker limit에 적당한 값을 설정할 필요가 있다.
- 과도하게 높게 잡으면 잠재적 OOM exception을 동반한 시스템 다운을 만날 수 있고, 너무 낮게 잡으면 쿼리가 실패할 확률이 높아진다. 물론, 시스템 다운보다는 쿼리 실패가 낫기 때문에 보수적인 설정으로 시작하는 것이 좋다.
- `기본값은 40%`이다.

indices.breaker.total.limit: 80%
- 이 값은 fielddata와 request circuit breaker를 합쳐서 제한을 거는 기능이다.
- `기본값은 70%`이다.

cluster.routing.allocation.disk.watermark.low: 90%
- 디스크 용량 기반으로 shard allocation을 도와주는 설정이다.
- 디스크 사용량이 설정값을 넘으면 해당 노드에는 shard를 allocation하지 않는다.
- `기본값은 85%`이다. 절대값으로 500mb 처럼 설정할 수도 있는데, 이 때에는 남은 디스크 용량을 의미한다.

cluster.routing.allocation.disk.watermark.high: 95%
- 디스크 사용량이 설정값을 넘어가면 해당 노드의 샤드를 다른 노드로 relocation한다.
- `기본값은 90%`이다. 마찬가지로 절대값으로 정할 경우는 남은 용량 기준이 된다.

cluster.routing.allocation.balance.shard: 0.1
- 클러스터의 shard balancing 관련 옵션중 하나이다.
- 이 값이 커지면 모든 노드에 샤드의 개수를 균등하게 분배하려는 경향이 강해진다는 것을 의미한다. 즉, 가중치 값이다.
- `기본값은 0.45`이다.

cluster.routing.allocation.balance.index: 0.9
- 역시 가중치 인자로서 이 값이 커지면 각 인덱스에서 샤드의 개수를 균등하게 분배하려는 경향이 강해진다는 것을 의미한다.
- 이 값은 바로 위의 cluster.routing.allocation.balance.shard와 합해서 1.0이 되어야 한다.
- `기본값은 0.55`이다.

cluster.routing.allocation.balance.primary: 0.0
- 이 값은 Elasticsearch 1.3.8에서 deprecated 되었다.

cluster.routing.allocation.balance.threshold: 0.8
- balancing action이 일어나도록 하는 threshold 값이다. 작을수록 balancing이 일어날 확률이 높아진다.
- `기본값은 1.0`이다.

cluster.routing.allocation.cluster_concurrent_rebalance: 2
- shard rebalancing이 동시에 몇 개 까지 허용되는 지를 결정하는 값이다.
- `기본값은 1`이다. 제한을 없애려면 -1 을 준다.

indices.store.throttle.max_bytes_per_sec: 20mb
- 초당 설정값을 넘는 용량의 segemnt merge는 일어나지 않도록 throttle 시키는 옵션이다.
- `기본값은 20mb`인데, spinning disk 기준이므로 SSD를 사용하고 있다면 100~200mb 정도로 늘려주는 것이 좋다.

index.merge.scheduler.max_thread_count: 1
- 인덱스 당 동시에 디스크에 access할 수 있는 thread의 수이다.
- `기본값은 Math.min(3, Runtime.getRuntime().availableProcessors() / 2)`이다.
- 기본값은 SSD로 구성된 시스템에 권장되고, spinning disk를 사용할 경우에는 concurrent I/O에 취약하므로 값을 1로 줄여주는 것이 좋다.

index.translog.flush_threshold_size: 1GB
- translog에 설정값 이상이 쌓이면 flush된다.
- `기본값은 200MB`인데, 덜 자주 flush되도록 값을 늘려주면 인덱싱 성능에 도움이 된다.

http.cors.enabled: true
- cross-origin resource sharing 관련 옵션이다.
- Elasticsearch 1.4 이상에서는 `기본값이 false`이므로, Kibana를 사용할 예정이라면 이 옵션을 켜준다.

http.cors.allow-origin
- resource sharing을 허용할 origin을 지정한다.
- `기본값은 /.*/`이고 origin을 제한하기 위해서는 /https?:\/\/localhost(:[0-9]+)?/ 이런 식으로 regular expression을 용도에 맞게 만들어주면 된다.

출처 : http://working.zzugg.com/es-logaggregation.html

Logstash Grok Pattern

  • USERNAME [a-zA-Z0-9._-]+
  • USER %{USERNAME}
  • INT (?:[+-]?(?:[0-9]+))
  • BASE10NUM (?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:.[0-9]+)?)|(?:.[0-9]+)))
  • NUMBER (?:%{BASE10NUM})
  • BASE16NUM (?<![0-9A-Fa-f])(?:[+-]?(?:0x)?(?:[0-9A-Fa-f]+))
  • BASE16FLOAT \b(?<![0-9A-Fa-f.])(?:[+-]?(?:0x)?(?:(?:[0-9A-Fa-f]+(?:.[0-9A-Fa-f]*)?)|(?:.[0-9A-Fa-f]+)))\b
  • POSINT \b(?:[1-9][0-9]*)\b
  • NONNEGINT \b(?:[0-9]+)\b
  • WORD \b\w+\b
  • NOTSPACE \S+
  • SPACE \s*
  • DATA .*?
  • GREEDYDATA .*
  • QUOTEDSTRING (?>(?<!\)(?>"(?>\.|\\"+)+"|""|(?>'(?>\.|\\'+)+')|''|(?>(?>\\.|[^\\]+)+`)|``))
  • UUID [A-Fa-f0-9]{8}-(?:[A-Fa-f0-9]{4}-){3}[A-Fa-f0-9]{12}

Networking

  • MAC (?:%{CISCOMAC}|%{WINDOWSMAC}|%{COMMONMAC})
  • CISCOMAC (?:(?:[A-Fa-f0-9]{4}.){2}[A-Fa-f0-9]{4})
  • WINDOWSMAC (?:(?:[A-Fa-f0-9]{2}-){5}[A-Fa-f0-9]{2})
  • COMMONMAC (?:(?:[A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2})
  • IPV6 ((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?
  • IPV4 (?<![0-9])(?:(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})...)(?![0-9])
  • IP (?:%{IPV6}|%{IPV4})
  • HOSTNAME \b(?:[0-9A-Za-z][0-9A-Za-z-]{0,62})(?:.(?:[0-9A-Za-z][0-9A-Za-z-]{0,62}))*(.?|\b)
  • HOST %{HOSTNAME}
  • IPORHOST (?:%{HOSTNAME}|%{IP})
  • HOSTPORT %{IPORHOST}:%{POSINT}

paths

  • PATH (?:%{UNIXPATH}|%{WINPATH})
  • UNIXPATH (?>/(?>[\w_%!$@:.,-]+|\.)*)+
  • TTY (?:/dev/(pts|tty([pq])?)(\w+)?/?(?:[0-9]+))
  • WINPATH (?>[A-Za-z]+:|\)(?:\\\?**)+
  • URIPROTO [A-Za-z]+(+[A-Za-z+]+)?
  • URIHOST %{IPORHOST}(?::%{POSINT:port})?

uripath comes loosely from RFC1738, but mostly from what Firefox

doesn't turn into %XX

  • URIPATH (?:/[A-Za-z0-9$.+!'(){},~:;=@#%_-])+

  • URIPATHPARAM %{URIPATH}(?:%{URIPARAM})?

  • URI %{URIPROTO}://(?:%{USER}(?::@*)?@)?(?:%{URIHOST})?(?:%{URIPATHPARAM})?

Months: January, Feb, 3, 03, 12, December

  • RIPARAM \?[A-Za-z0-9$.+!'|(){},~@#%&/=:;_?-[]]
  • MONTH \b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\b
  • MONTHNUM (?:0?[1-9]|1[0-2])
  • MONTHNUM2 (?:0[1-9]|1[0-2])
  • MONTHDAY (?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9])

Days: Monday, Tue, Thu, etc...

  • DAY (?:Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?|Sun(?:day)?)

Years?

  • YEAR (?>\d\d){1,2}
  • HOUR (?:2[0123]|[01]?[0-9])
  • MINUTE (?:[0-5][0-9])

'60' is a leap second in most time standards and thus is valid.

  • SECOND (?:(?:[0-5]?[0-9]|60)(?:[:.,][0-9]+)?)
  • TIME (?!<[0-9])%{HOUR}:%{MINUTE}(?::%{SECOND})(?![0-9])

datestamp is YYYY/MM/DD-HH:MM:SS.UUUU (or something like it)

  • DATE_US %{MONTHNUM}[/-]%{MONTHDAY}[/-]%{YEAR}
  • DATE_EU %{MONTHDAY}[./-]%{MONTHNUM}[./-]%{YEAR}
  • ISO8601_TIMEZONE (?:Z|[+-]%{HOUR}(?::?%{MINUTE}))
  • ISO8601_SECOND (?:%{SECOND}|60)
  • TIMESTAMP_ISO8601 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?
  • DATE %{DATE_US}|%{DATE_EU}
  • DATESTAMP %{DATE}[- ]%{TIME}
  • TZ (?:[PMCE][SD]T|UTC)
  • DATESTAMP_RFC822 %{DAY} %{MONTH} %{MONTHDAY} %{YEAR} %{TIME} %{TZ}
  • DATESTAMP_RFC2822 %{DAY}, %{MONTHDAY} %{MONTH} %{YEAR} %{TIME} %{ISO8601_TIMEZONE}
  • DATESTAMP_OTHER %{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{TZ} %{YEAR}
  • DATESTAMP_EVENTLOG %{YEAR}%{MONTHNUM2}%{MONTHDAY}%{HOUR}%{MINUTE}%{SECOND}

Syslog Dates: Month Day HH:MM:SS

  • SYSLOGTIMESTAMP %{MONTH} +%{MONTHDAY} %{TIME}
  • PROG (?:[\w._/%-]+)
  • SYSLOGPROG %{PROG:program}(?:[%{POSINT:pid}])?
  • SYSLOGHOST %{IPORHOST}
  • SYSLOGFACILITY <%{NONNEGINT:facility}.%{NONNEGINT:priority}>
  • HTTPDATE %{MONTHDAY}/%{MONTH}/%{YEAR}:%{TIME} %{INT}

Shortcuts

  • QS %{QUOTEDSTRING}

Log formats

  • SYSLOGBASE %{SYSLOGTIMESTAMP:timestamp} (?:%{SYSLOGFACILITY} )?%{SYSLOGHOST:logsource} %{SYSLOGPROG}:
  • COMMONAPACHELOG %{IPORHOST:clientip} %{USER:ident} %{USER:auth} [%{HTTPDATE:timestamp}] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{NUMBER:bytes}|-)
  • COMBINEDAPACHELOG %{COMMONAPACHELOG} %{QS:referrer} %{QS:agent}

Log Levels

  • LOGLEVEL ([Aa]lert|ALERT|[Tt]race|TRACE|[Dd]ebug|DEBUG|[Nn]otice|NOTICE|[Ii]nfo|INFO|[Ww]arn?(?:ing)?|WARN?(?:ING)?|[Ee]rr?(?:or)?|ERR?(?:OR)?|[Cc]rit?(?:ical)?|CRIT?(?:ICAL)?|[Ff]atal|FATAL|[Ss]evere|SEVERE|EMERG(?:ENCY)?|[Ee]merg(?:ency)?)

출처 : https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns
logtrash 기타 패턴 참고자료: https://github.com/logstash-plugins/logstash-patterns-core
logtrash plugin 참고자료 : https://github.com/logstash-plugins

results matching ""

    No results matching ""