Skip to content

Commit 2300ac5

Browse files
authored
Merge pull request #28 from ikochuev/lesson30
Lesson 30 submission: EFK logging with regexp and grok parsing
2 parents 338445c + 216f49a commit 2300ac5

8 files changed

Lines changed: 161 additions & 0 deletions

lesson30/docker-compose.yml

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
services:
2+
ui:
3+
image: ghcr.io/codeby-devops/ui:logging
4+
container_name: ui
5+
ports:
6+
- "9292:9292/tcp"
7+
environment:
8+
- POST_SERVICE_HOST=post
9+
- POST_SERVICE_PORT=5000
10+
- COMMENT_SERVICE_HOST=comment
11+
- COMMENT_SERVICE_PORT=9292
12+
logging:
13+
driver: "fluentd"
14+
options:
15+
fluentd-address: "127.0.0.1:24224"
16+
tag: "service.ui"
17+
depends_on:
18+
- comment
19+
- post
20+
- fluentd
21+
networks:
22+
- logging
23+
24+
post:
25+
image: ghcr.io/codeby-devops/post:logging
26+
container_name: post
27+
environment:
28+
- POST_DATABASE_HOST=post_db
29+
- POST_DATABASE=posts
30+
logging:
31+
driver: "fluentd"
32+
options:
33+
fluentd-address: "127.0.0.1:24224"
34+
tag: "service.post"
35+
depends_on:
36+
- post_db
37+
- fluentd
38+
ports:
39+
- 5000:5000
40+
networks:
41+
- logging
42+
43+
comment:
44+
image: ghcr.io/codeby-devops/comment:logging
45+
container_name: comment
46+
environment:
47+
- COMMENT_DATABASE_HOST=post_db
48+
- COMMENT_DATABASE=comments
49+
depends_on:
50+
- post_db
51+
networks:
52+
- logging
53+
54+
post_db:
55+
image: mongo:4.4
56+
container_name: post_db
57+
volumes:
58+
- ./data/post_db:/data/db
59+
networks:
60+
- logging
61+
62+
elasticsearch:
63+
container_name: elasticsearch
64+
image: elasticsearch:6.8.20
65+
environment:
66+
- discovery.type=single-node
67+
- ES_JAVA_OPTS=-Xms512m -Xmx512m
68+
ports:
69+
- "9200:9200"
70+
networks:
71+
- logging
72+
73+
kibana:
74+
container_name: kibana
75+
image: kibana:6.8.20
76+
ports:
77+
- "5601:5601"
78+
depends_on:
79+
- elasticsearch
80+
networks:
81+
- logging
82+
83+
fluentd:
84+
container_name: fluentd
85+
build:
86+
context: ./fluentd-image
87+
ports:
88+
- "24224:24224"
89+
- "24224:24224/udp"
90+
volumes:
91+
- ./fluentd/fluent.conf:/fluentd/etc/fluent.conf
92+
depends_on:
93+
- elasticsearch
94+
networks:
95+
- logging
96+
97+
networks:
98+
logging:
99+
driver: bridge

lesson30/fluentd-image/Dockerfile

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
FROM fluent/fluentd:v1.19-debian-1
2+
3+
USER root
4+
RUN fluent-gem install fluent-plugin-elasticsearch -v 6.0.0 \
5+
&& gem uninstall elasticsearch -aIx || true \
6+
&& gem install elasticsearch -v 6.8.0 \
7+
&& fluent-gem install fluent-plugin-grok-parser
8+
9+
USER fluent

lesson30/fluentd/fluent.conf

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<source>
2+
@type forward
3+
port 24224
4+
bind 0.0.0.0
5+
</source>
6+
7+
<filter service.post>
8+
@type parser
9+
format json
10+
key_name log
11+
</filter>
12+
13+
<filter service.ui>
14+
@type parser
15+
key_name log
16+
<parse>
17+
@type regexp
18+
expression /^I,\s+\[(?<time>[^\]]+)\]\s+(?<level>\S+)\s+--\s+:\s+service=(?<service>\S+)\s+\|\s+event=(?<event>\S+)(?:\s+\|\s+path=(?<path>[^|]+))?\s+\|\s+request_id=(?<request_id>[^ ]+)(?:\s+\|\s+remote_addr=(?<remote_addr>[^ ]+))?(?:\s+\|\s+method=\s*(?<method>\S+))?(?:\s+\|\s+response_status=(?<response_status>\d+))?\s+\|\s+message='(?<message>[^']+)'\s+\|\s+params:\s*(?<params>.*)$/
19+
</parse>
20+
</filter>
21+
22+
<filter service.ui>
23+
@type parser
24+
key_name log
25+
reserve_data true
26+
emit_invalid_record_to_error false
27+
<parse>
28+
@type grok
29+
grok_name_key parsed_by
30+
grok_failure_key grok_failure
31+
grok_pattern I,\s+\[%{TIMESTAMP_ISO8601:time}\s+#%{INT:pid}\]\s+%{LOGLEVEL:level}\s+--\s+:\s+service=%{WORD:service}\s+\|\s+event=%{WORD:event}\s+\|\s+request_id=%{UUID:request_id}\s+\|\s+message='%{DATA:message}'\s+\|\s+params:\s+%{GREEDYDATA:params}
32+
</parse>
33+
</filter>
34+
35+
<match *.**>
36+
@type copy
37+
<store>
38+
@type elasticsearch
39+
host elasticsearch
40+
port 9200
41+
logstash_format true
42+
suppress_type_name true
43+
logstash_prefix fluentd
44+
logstash_dateformat %Y%m%d
45+
include_tag_key true
46+
type_name access_log
47+
tag_key @log_name
48+
flush_interval 1s
49+
</store>
50+
<store>
51+
@type stdout
52+
</store>
53+
</match>
232 KB
Loading
269 KB
Loading
116 KB
Loading
135 KB
Loading
248 KB
Loading

0 commit comments

Comments
 (0)