ืื ื ื-Badoo ืขืืงืืื ืื ืืืื ืืืจ ืืื ืืืืืืืช ืืืฉืืช ืืืขืจืืืื ืืื ืืืฉืชืืฉ ืืื ืืืขืจืืช ืฉืื ื ืื ืื. ืื ืื ื ืจืืฆืื ืืืืืง ืืช ืืื ืืืืืงืจืื ืืืื ืขื ืืงืืืื. ืืื ืืืงืืฉ ื-Loki, ืืขืจืืช ืฆืืืจืช ืืืื ืื.
Loki ืืื ืคืชืจืื ืืืืกืื ืืฆืคืืื ืืืืื ืื, ืืขืจืืื ืื ืืกืคืงืช ืื ืืขืจืืช ืืืืฉื ืื ืืชืืื ืืฉืืืืช ื ืชืื ืื ื-Prometheus. ืืืืืฉ ืืื ืฉืืืจืจ ืขืืืื ื ืืกืฃ, ืฉืืงืืื ืืืืคื ืคืขืื ืขื ืืื ืืืืฆืจืื. ืขื ืืื ืืืชื ื ืื ืืืงื ืืืื ืืขืฉืืช, ืืืื ืชืืื ืืช ืืื ืืกืคืง, ืืขื ืืื ืืื ืืืื ืืฉืืฉ ืืืืืคื ื-ELK, ืืขืจืืื ืฉืื ืื ื ืืฉืชืืฉืื ืืขืช.
ืื ืื ืืืงื
Grafana Loki ืืื ืกื ืจืืืืื ืืืขืจืืช ืจืืฉืื ืฉืืื. ืื ืืืื ืืืขืจืืืช ืืืืืช ืืืจืืช, ืืืงื ืืืืกืกืช ืขื ืืจืขืืื ืฉื ืืฆืืจืช ืืื ืืงืก ืจืง ืฉื ืืื ื ืชืื ืื ืฉื ืืืื - ืชืืืืืช (ืืืืืง ืืื ื-Prometheus), ืืืืืกืช ืืืืื ืื ืขืฆืื ืื ืืฆื ืื ืืืืฉืื ื ืคืจืืื.
ืืคื ื ืฉืื ื ื ืื ืก ืืื ืฉืืชื ืืืื ืืขืฉืืช ืขื ืืืงื, ืื ื ืจืืฆื ืืืืืืจ ืืื ืืืืื ื ื"ืจืขืืื ืฉื ืืืกืคืช ืืื ื ืชืื ืื ืืืื ืืงืก ืืืื". ืืื ื ืฉืืื ืืช ืืืฉืช Loki ืืืช ืืืฉืช ืืืื ืืงืก ืืคืชืจืื ืืช ืืกืืจืชืืื, ืืืื Elasticsearch, ืืืืฆืขืืช ืืืืื ืฉื ืฉืืจื ืืืืื nginx:
172.19.0.4 - - [01/Jun/2020:12:05:03 +0000] "GET /purchase?user_id=75146478&item_id=34234 HTTP/1.1" 500 8102 "-" "Stub_Bot/3.0" "0.001"
ืืขืจืืืช ืืกืืจืชืืืช ืื ืชืืืช ืืช ืื ืืฉืืจื, ืืืื ืฉืืืช ืขื ืขืจืื user_id ื-item_id ืืืืืืืื ืจืืื, ืืืืืกื ืืช ืืื ืืืื ืืงืกืื ืืืืืื. ืืืชืจืื ืืืืฉื ืื ืืื ืฉื ืืชื ืืืจืืฅ ืฉืืืืชืืช ืืืจืืืืช ืืืืืจืืช, ืืืืืื ืฉืืืขื ืื ืื ืชืื ืื ื ืืฆืืื ืืืื ืืงืก. ืืื ืืชื ืฆืจืื ืืฉืื ืขื ืื ืืื ืฉืืืื ืืืคื ืืืื, ืื ืฉืืชืืจืื ืืืจืืฉืืช ืืืืจืื. ืืชืืฆืื ืืื, ืืื ืืงืก ืืืงืกื ืืืื ืฉื ืืืืื ืื ืืืื ืืืืืื ืืืืื ืื ืขืฆืื. ืขื ืื ืช ืืืคืฉ ืืืืืจืืช ืืจืื, ืืฉ ืืืขืื ืืช ืืืื ืืงืก ืืืืืจืื. ืืืื ืฉืืืชืจ ืืืื ืื, ืืืื ืืงืก ืืื ืืืจ ืืืชืจ ืืืื ืฆืืจื ืืืชืจ ืืืืจืื.
ืืืฉืช ืืืงื ืืืจืฉืช ืืืืฅ ืืืืืจืืืช ืจืง ืืช ืื ืชืื ืื ืืืจืืฉืื, ืฉืืกืคืจ ืืขืจืืื ืฉืืื ืงืื. ืื ืื ืื ื ืืงืืืื ืืื ืืงืก ืงืื ืื ืืื ืืืคืฉ ืืช ืื ืชืื ืื ืขื ืืื ืกืื ืื ืืคื ืืื ืืฉืืืช ืืืื ืืงืก, ืืืืืจ ืืื ืืกืจืืง ืืช ืืฉืืจ ืขื ืืืืืืื ืจืืืืจืืื ืื ืืืคืืฉื ืืืจืืืช ืืฉื ื. ืืชืืืื ืื ื ืจืื ืืืืืจ ืืืืชืจ, ืืื ืืืงื ืืคืฆื ืืช ืืืงืฉื ืืืกืคืจ ืืืงืื ืืืืฆืข ืืืชื ืืืงืืื, ืืืขืื ืืืืช ืืืืื ืฉื ื ืชืื ืื ืืืื ืงืฆืจ. ืืกืคืจ ืืจืกืืกืื ืืืืงืฉืืช ืืืงืืืืืช ืืื ื ืืชื ืืืืืจื; ืืคืืื, ืืืืช ืื ืชืื ืื ืฉื ืืชื ืืขืื ืืืืืืช ืืื ืชืืืื ืืืืคื ืืื ืืืจื ืืืืืช ืืืฉืืืื ืืืกืืคืงืื.
ืืืืืคื ืืื ืืื ืืื ืืืืจ ืืืื ืืืื ืืื ืืื ืืก ืืงืืื ืงืื ืืืคืฉืจ ืืืืงื ืืฉืืื ืืขืืืช ืืืขืจืืช. ื ืืชื ืืืืืืจ ืืืืจืืื ืืืชื ืืืืืฉืืช ืืืชืื ืืฆืจืืื ืฉืื.
ืขืจืืืช ืืืงื ืืืจืืืช ืืฉืืืฉื ืืจืืืืื: Promtail, Loki, Grafana. Promtail ืืืกืคืช ืืืื ืื, ืืขืืืช ืืืชื ืืฉืืืืช ืืืชื ืืืืงื. ืืืงื ืฉืืืจ ืขืืืื. ืืืจืคืื ื ืืืืื ืืืงืฉ ื ืชืื ืื ืืืืงื ืืืืจืืืช ืืืชื. ืืืืคื ืืืื, ื ืืชื ืืืฉืชืืฉ ืืืืงื ืื ืจืง ืืืืกืื ืืืื ืื ืืืืืคืืฉ ืืจืื. ืืขืจืืื ืืืื ืืกืคืงืช ืืืืื ืืืืช ื ืืืจืืช ืืขืืืื ืื ืืชืื ื ืชืื ืื ื ืื ืกืื ืืืืฆืขืืช ืฉืืืช ืคืจืืืชืืืก.
ื ืืชื ืืืฆืื ืชืืืืจ ืฉื ืชืืืื ืืืชืงื ื
ืืืคืืฉ ืืืื
ืืชื ืืืื ืืืคืฉ ืืืืื ืื ืืืืฉืง ืืืืื Grafana โ Explorer. ืืฉืืืืชืืช ืืฉืชืืฉืืช ืืฉืคืช LogQL, ืฉืืืื ืืืื ื-PromQL ืฉืื ืืฉืชืืฉ ืคืจืืืชืืืก. ืืืืคื ืขืงืจืื ื, ื ืืชื ืืืฉืื ืขืืื ื-grep ืืืืืจ.
ืืืฉืง ืืืืคืืฉ ื ืจืื ืื:
ืืฉืืืืชื ืขืฆืื ืืืจืืืช ืืฉื ื ืืืงืื: ืืืจืจ ืืืกื ื. ืืืจืจ ืืื ืืืคืืฉ ืืคื ืืื ื ืชืื ืื (ืชืืืืืช) ืฉืืืงืฆื ืืืืื ืื, ืืคืืืืจ ืืื ืืืจืืืช ืืืคืืฉ ืื ืืืืื ืจืืืืจื ืฉืืกื ื ืช ืจืฉืืืืช ืฉืืืืืจื ืขื ืืื ืืืืจืจ. ืืืืืื ืื ืชืื ื: ืืกืืืจืืื ืืกืืืกืืื - ืืืืจืจ, ืืื ืืืจื - ืืคืืืืจ.
{image_name="nginx.promtail.test"} |= "index"
ืืืื ืืืืคื ืฉืื ืืืงื ืขืืื, ืื ื ืืชื ืืืืืฉ ืืงืฉืืช ืืื ืืืจืจ, ืื ื ืืชื ืืืคืื ืืช ืืชืืืืืช ืืื ืจืืืช ืืืืคื ืฉืจืืจืืชื.
ืืืืจืจ ืืื ืขืจื ืืืคืชื ืฉื ืืขืจื ืืกืืืจืื ืืกืืืกืืื. ื ืืชื ืืฉืื ืืืจืจืื ืืืฆืืื ืชื ืื ืืืคืืฉ ืฉืื ืื ืืืืฆืขืืช ืืืืคืจืืืจืื =, != ืื ืืืืืืื ืจืืืืจืืื:
{instance=~"kafka-[23]",name!="kafka-dev"}
// ะะฐะนะดัั ะปะพะณะธ ั ะปะตะนะฑะปะพะผ instance, ะธะผะตััะธะต ะทะฝะฐัะตะฝะธะต kafka-2, kafka-3, ะธ ะธัะบะปััะธั dev
ืืกื ื ืืื ืืงืกื ืื ืืืืื ืจืืืืจื ืฉืืกื ื ืืช ืื ืื ืชืื ืื ืฉืืชืงืืื ืขื ืืื ืืืืจืจ.
ืืคืฉืจ ืืงืื ืืจืคืื ืื-ืืืง ืขื ืกืื ืื ืชืื ืื ืฉืืชืงืืื ืืืฆื ืืืืืื. ืืืืืื, ืืชื ืืืื ืืืืืช ืืช ืชืืืจืืช ืืืชืจืืฉืืช ืืืืื ื nginx ืฉื ืขืจื ืืืืื ืืช ืืืจืืืช ืืืื ืืงืก:
ื ืืชื ืืืฆืื ืชืืืืจ ืืื ืฉื ืืชืืื ืืช ืืชืืขืื
ื ืืชืื ืืืื
ืืฉื ื ืืกืคืจ ืืจืืื ืืืืกืืฃ ืืืื ืื:
- ืืขืืจืช Promtail, ืจืืื ืกืื ืืจืื ืฉื ืืืืกื ืืช ืืืืกืืฃ ืืืื ืขืฅ.
- ืืฉืืจืืช ืืืืื ืืืืงืจ ืืืืฆืขืืช
ืื ืื ืืืืืื ื ืฉื ืืืงื ืืืงืจ. - ืืฉืชืืฉ ื- Fluentd ืื Fluent Bit ืฉืืืืืื ืืฉืืื ื ืชืื ืื ืืืืงื. ืื ืืืื ื-Promtail, ืืฉ ืืื ืื ืชืืื ืืืื ืื ืืืขื ืืื ืกืื ืฉื ืืืื ืืื ืืืืืื ืืืชืืืื ืื ืขื ืืืื ืื ืืจืืื ืฉืืจืืช.
ืืืจื ืืื Promtail ืืฉืืฉ ืื ืืชืื. ืื ืขืืฉื ืฉืืืฉื ืืืจืื:
- ืืืฆื ืืงืืจืืช ื ืชืื ืื.
- ืฆืจืฃ ืืื ืชืืืืืช.
- ืฉืืื ื ืชืื ืื ืืืืงื.
ื ืืื ืืขืืฉืื, Promtail ืืืื ืืงืจืื ืืืื ืื ืืงืืฆืื ืืงืืืืื ืืืืืื systemd. ืื ืืืื ืืืืืช ืืืชืงื ืืื ืืืื ื ืฉืืื ื ื ืืกืคืื ืืืื ืื.
ืืฉ ืืื ืืืจืฆืื ืขื Kubernetes: Promtail ืืืื ืืืืืืืืช ืืช ืืฆื ืืืฉืืื ืืจื Kubernetes REST API ืืืืกืคืช ืืืื ืื ืืฆืืืช, ืฉืืจืืช ืื ืคืื, ืืืคืจืกืืช ืืื ืชืืืืืช ืืืืืกืกืืช ืขื ืืื ื ืชืื ืื ื-Kubernetes (ืฉื ืืคืื, ืฉื ืืงืืืฅ ืืื').
ื ืืชื ืื ืืชืืืช ืชืืืืืช ืขื ืกืื ื ืชืื ืื ืืืืืื ืืืืฆืขืืช Pipeline. Pipeline Promtail ืืืื ืืืืืช ืืืจืื ืืืจืืขื ืกืืืื ืฉื ืฉืืืื. ืคืจืืื ื ืืกืคืื - ื
- ืฉืืื ื ืืชืื. ืื ืืฉืื ืฉื RegEx ื-JSON. ืืฉืื ืื, ืื ื ืืืืฆืื ื ืชืื ืื ืืืืืื ืื ืืชืื ืืืคื ืฉื ืงืจืืช ืฉืืืืฆื. ืืชื ืืืื ืืืืฅ ื-JSON ืคืฉืื ืขื ืืื ืืขืชืงืช ืืฉืืืช ืฉืื ื ืฆืจืืืื ืืชืื ืืืคื ืฉืืืืฆื, ืื ืืืืฆืขืืช ืืืืืืื ืจืืืืจืืื (RegEx), ืืืฉืจ ืงืืืฆืืช ืขื ืฉื "ืืืืคืืช" ืืืคื ืฉืืืืฆื. ืืืคื ืฉืืืืฆื ืืื ืืืกืื ืืคืชื-ืขืจื, ืืืฉืจ ืืคืชื ืืื ืฉื ืืฉืื, ืืืขืจื ืืื ืขืจืื ืืืืืื ืื.
- ืฉืื ืื ืฉืืืื. ืืฉืื ืื ืืฉ ืฉืชื ืืคืฉืจืืืืช: ืืจื ืกืคืืจืืฆืื, ืฉืื ืื ื ืงืืืขืื ืืช ืืืื ืืืจื ืกืคืืจืืฆืื, ืืืงืืจ - ืืงืืจ ืื ืชืื ืื ืืืจื ืกืคืืจืืฆืื ืืืืคื ืฉืืืืฆื. ืื ืืื ืฉืื ืืื ืืืคื ืฉืืืืฆื, ืื ืืื ืืืืืฆืจ. ืื, ื ืืชื ืืืฆืืจ ืชืืืืืช ืฉืืื ื ืืืืกืกืืช ืขื ืืืคื ืฉืืืืฆื. ืืฉืื ืื, ืื ื ืืืืืื ืืชืคืขื ืืช ืื ืชืื ืื ืืืคื ืฉืืืืฆื ืืืืฆืขืืช ืฉืืืืฉ ืืืง ืืืื
ืชืื ืืช ืืืื ื . ืื ืืกืฃ, ืขืืื ื ืืืืืจ ืฉืืืคื ืฉืืืืฆื ื ืืขื ื ืืืืืื ืืืืื ืื ืืชืื, ืื ืฉืืืคืฉืจ ืืืฉื ืืืืืง ืืช ืืขืจื ืื: "{{if .tag}tag value exists{end}}". ืืชืื ืืช ืชืืืืช ืืชื ืืื, ืืืืืืืช ืืืืื ืคืื ืงืฆืืืช ืืืจืืืืช ืืืื Replace ื-Trim. - ืฉืืื ืคืขืืื. ืืฉืื ืื, ืืชื ืืืื ืืขืฉืืช ืืฉืื ืขื ืืืืืืฅ:
- ืฆืืจ ืชืืืืช ืืื ืชืื ืื ืฉืืืืฆื, ืฉืชืืื ืก ืืืื ืืงืก ืขื ืืื ืืืงื.
- ืฉื ื ืื ืืืืจ ืืช ืืื ืืืืจืืข ืืืืืื.
- ืฉื ื ืืช ืื ืชืื ืื (ืืงืกื ืืืื) ืฉืืขืืจื ืืืืงื.
- ืฆืืจ ืืืืื.
- ืฉืืื ืกืื ืื. ืฉืื ืืืชืืื, ืฉืื ื ืืื ืืฉืืื ืจืฉืืืืช ืฉืืื ื ื ืฆืจืืืื ื-/dev/null, ืื ืืฉืืื ืืืชื ืืขืืืื ื ืืกืฃ.
ืืขืืจืช ืืืืืื ืฉื ืขืืืื ืืืื ื nginx ืจืืืืื, ืืจืื ืืืฆื ื ืืชื ืื ืชื ืืืื ืื ืืืืฆืขืืช Promtail.
ืืืืืงื, ื ืืงื ืชืืื ืช nginx jwilder/nginx-proxy:alpine ืฉืื ื ืืืืื ืงืื ืฉืืืื ืืืฆืข ืฉืืืืชืืช ืืขืฆืื ืืืืฆืขืืช HTTP ืืชืืจ nginx-proxy. ืืืืื ืืฉ ืืื ื ืงืืืืช ืงืฆื, ืืื ืืื ืืืื ืืชืช ืชืืืืืช ืืืืืื ืฉืื ืื, ืขื ืกืืืืกืื ืฉืื ืื ืฉื HTTP ืืขื ืขืืืืืื ืฉืื ืื.
ื ืืกืืฃ ืืืื ืื ืืืืืืืช docker, ืืืชื ื ืืชื ืืืฆืื ืืืืจื ืื ืชืื /var/lib/docker/containers/ / -json.log
ื-docker-compose.yml ืื ื ืืืืืจืื ืืช Promtail ืืืฆืืื ืื ืืช ืื ืชืื ืืชืฆืืจื:
promtail:
image: grafana/promtail:1.4.1
// ...
volumes:
- /var/lib/docker/containers:/var/lib/docker/containers:ro
- promtail-data:/var/lib/promtail/positions
- ${PWD}/promtail/docker.yml:/etc/promtail/promtail.yml
command:
- '-config.file=/etc/promtail/promtail.yml'
// ...
ืืืกืฃ ืืช ืื ืชืื ืืืืืื ื-promtail.yml (ืืฉ ืืคืฉืจืืช "ืืืงืจ" ืืชืฆืืจื ืฉืขืืฉื ืืช ืืืชื ืืืืจ ืืฉืืจื ืืืช, ืืื ืื ืื ืืืื ืื ืื ืืจืืจ):
scrape_configs:
- job_name: containers
static_configs:
labels:
job: containerlogs
__path__: /var/lib/docker/containers/*/*log # for linux only
ืืืฉืจ ืชืฆืืจื ืื ืืืคืขืืช, ืืืงื ืืงืื ืืืื ืื ืืื ืืงืื ืืืื ืจืื. ืืื ืืืืื ืข ืืื, ืื ื ืืฉื ืื ืืช ืืืืืจืืช ืฉื test nginx ื-docker-compose.yml - ืืืกืฃ ืจืืฉืื ืืฉืื ืืชื:
proxy:
image: nginx.test.v3
//โฆ
logging:
driver: "json-file"
options:
tag: "{{.ImageName}}|{{.Name}}"
ืขืจืื ืืช promtail.yml ืืืืืจ Pipeline. ืืืืื ืื ืื ืืืืงืื:
{"log":"u001b[0;33;1mnginx.1 | u001b[0mnginx.test 172.28.0.3 - - [13/Jun/2020:23:25:50 +0000] "GET /api/index HTTP/1.1" 200 0 "-" "Stub_Bot/0.1" "0.096"n","stream":"stdout","attrs":{"tag":"nginx.promtail.test|proxy.prober"},"time":"2020-06-13T23:25:50.66740443Z"}
{"log":"u001b[0;33;1mnginx.1 | u001b[0mnginx.test 172.28.0.3 - - [13/Jun/2020:23:25:50 +0000] "GET /200 HTTP/1.1" 200 0 "-" "Stub_Bot/0.1" "0.000"n","stream":"stdout","attrs":{"tag":"nginx.promtail.test|proxy.prober"},"time":"2020-06-13T23:25:50.702925272Z"}
ืฉืืื ืฆืื ืืจ:
- json:
expressions:
stream: stream
attrs: attrs
tag: attrs.tag
ืื ื ืืืืฆืื ืืช ืฉืืืช ืืืจื, attrs, attrs.tag (ืื ืืฉ) ืื-JSON ืื ืื ืก ืืืื ืืกืื ืืืชื ืืืคื ืฉืืืืฆื.
- regex:
expression: ^(?P<image_name>([^|]+))|(?P<container_name>([^|]+))$
source: "tag"
ืื ืืื ืืคืฉืจ ืืฉืื ืืช ืฉืื ืืชื ืืืคื ืฉืืืืฆื, ืื ืืืืฆืขืืช ื-regexp ื ืืืฅ ืืช ืฉืืืช ืืชืืื ื ืืืืืื.
- labels:
image_name:
container_name:
ืื ื ืืืืงืื ืชืืืืืช. ืื ืืืคืชืืืช image_name ื-container_name ื ืืฆืืื ืื ืชืื ืื ืฉืืืืฆื, ืืขืจืืื ืฉืืื ืืืงืฆื ืืชืืืืืช ืืืชืืืืืช.
- match:
selector: '{job="docker",container_name="",image_name=""}'
action: drop
ืื ื ืืฉืืืืื ืืช ืื ืืืืื ืื ืฉืืื ืืื ืชืืืืืช image_name ื-contain_name ืืืืืจืื.
- match:
selector: '{image_name="nginx.promtail.test"}'
stages:
- json:
expressions:
row: log
ืขืืืจ ืื ืืืืื ืื ืฉืฉื ื-image ืฉืืื ืฉืืื ื-nginx.promtail.test, ืื ื ืืืืฆืื ืืช ืฉืื ืืืืื ืืืืื ืืืงืืจ ืืืื ืืกืื ืืืชื ืืืคื ืฉืืืืฆื ืืขืืจืช ืืงืฉ ืืฉืืจื.
- regex:
# suppress forego colors
expression: .+nginx.+|.+[0m(?P<virtual_host>[a-z_.-]+) +(?P<nginxlog>.+)
source: logrow
ืื ื ืื ืงืื ืืช ืืืจืืืช ืืงืื ืขื ืืืืืืื ืจืืืืจืืื ืืฉืืืคืื ืืช ืืืืจื ืืืืจืืืืื ืฉื nginx ืืืช ืฉืืจืช ืืืืื ืฉื nginx.
- regex:
source: nginxlog
expression: ^(?P<ip>[w.]+) - (?P<user>[^ ]*) [(?P<timestamp>[^ ]+).*] "(?P<method>[^ ]*) (?P<request_url>[^ ]*) (?P<request_http_protocol>[^ ]*)" (?P<status>[d]+) (?P<bytes_out>[d]+) "(?P<http_referer>[^"]*)" "(?P<user_agent>[^"]*)"( "(?P<response_time>[d.]+)")?
ื ืืชืื ืืืื nginx ืขื ืืืืืืื ืจืืืืจืืื.
- regex:
source: request_url
expression: ^.+.(?P<static_type>jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|html|htm)$
- regex:
source: request_url
expression: ^/photo/(?P<photo>[^/?.]+).*$
- regex:
source: request_url
expression: ^/api/(?P<api_request>[^/?.]+).*$
ื ืืชืื request_url. ืืขืืจืช regexp, ืื ื ืงืืืขืื ืืช ืืืจืช ืืืงืฉื: ืืกืืืืงื, ืืชืืื ืืช, ื-API ืืืืืืืจ ืืช ืืืคืชื ืืืชืืื ืืืคื ืฉืืืืฆื.
- template:
source: request_type
template: "{{if .photo}}photo{{else if .static_type}}static{{else if .api_request}}api{{else}}other{{end}}"
ืืืืฆืขืืช ืืืคืจืืืจืื ืืืชื ืื ื-Template, ืื ื ืืืืงืื ืืช ืืฉืืืช ืืืืชืงื ืื ืืืคื ืืืืืืฆืช ืืืืืืจืื ืืช ืืขืจืืื ืื ืืจืฉืื ืืฉืื request_type: photo, static, API. ืืงืฆื ืืืจ ืื ื ืืฉื. ืืขืช request_type ืืืื ืืช ืกืื ืืืงืฉื.
- labels:
api_request:
virtual_host:
request_type:
status:
ืื ืื ื ืืืืืจืื ืืช ืืชืืืืืช api_request, virtual_host, request_type ื-status (ืกืืืืก HTTP) ืขื ืกืื ืื ืฉืืฆืืื ื ืืฉืื ืืืคื ืฉืืืืฆื.
- output:
source: nginx_log_row
ืฉื ื ืคืื. ืืขืช ืืืื ื-nginx ืื ืืงื ืืืืคื ืฉืืืืฆื ืขืืืจ ืืืืงื.
ืืืืจ ืืคืขืืช ืืชืฆืืจื ืืขืื, ืืชื ืืืื ืืจืืืช ืฉืื ืขืจื ืืกืืื ืขื ืกืื ื ืชืื ืื ืืืืืื.
ืืืืจ ืฉืืืืืฅ ืชืืืืืช ืขื ืืกืคืจ ืจื ืฉื ืขืจืืื (ืงืจืืื ืืืืช) ืืืื ืืืื ืืฉืืขืืชืืช ืืช ืืืงื. ืืืืืจ, ืืกืืจ ืืืื ืืก ืืืื ืืงืก, ืืืฉื, user_id. ืงืจื ืขืื ืขื ืื ืืืืืจ
ืืืืืืช ืืืื
ืืืงื ืืืื ืืฉืืฉ ืืืงืืจ ื ืชืื ืื ืขืืืจ ืชืจืฉืืื Grafana ืืืืฆืขืืช LogQL. ืืชืืื ืืช ืืืืืช ื ืชืืืืช:
- ืงืฆื - ืืกืคืจ ืจืฉืืืืช ืืฉื ืืื;
- ืกืคืืจื ืืืืจื ืืื - ืืกืคืจ ืืจืฉืืืืช ืืืืื ืื ืชืื.
ืืฉ ืื ืคืื ืงืฆืืืช ืฆืืืจื Sum, Avg ืืืืจืืช. ืืชื ืืืื ืืื ืืช ืืจืคืื ืืืจืืืื ืืืื, ืืืฉื, ืืจืฃ ืฉื ืืกืคืจ ืฉืืืืืช HTTP:
ืืงืืจ ืื ืชืื ืื ืืจืืจืช ืืืืื ืฉื ืืืงื ืืื ืงืฆืช ืคืืืช ืคืื ืงืฆืืื ืื ืืืงืืจ ืื ืชืื ืื ืฉื ืคืจืืืชืืืก (ืืืืืื, ืื ื ืืชื ืืฉื ืืช ืืช ืืืงืจื), ืืื ืืช ืืืงื ื ืืชื ืืืืจ ืืืงืืจ ืืกืื ืคืจืืืชืืืก. ืื ื ืื ืืืื ืื ืื ืืชื ืืืืช ืืชืืขืืช, ืืื ืื ืืฉืคืื ืืคื ืชืืืืช ืืืคืชืืื "
ืืืกืฃ ืืช Loki ืืืงืืจ ื ืชืื ืื ืขื ืกืื Prometheus ืืืืกืฃ ืืชืืืช URL /loki:
ืืืชื ืืืื ืืขืฉืืช ืืจืคืื, ืืืืื ืื ืื ื ืขืืืืื ืขื ืืืืื ืืคืจืืืชืืืก:
ืื ื ืืืฉื ืฉืืคืขืจ ืืคืื ืงืฆืืื ืืืืช ืืื ืืื ื ืืืืคืชืืื ืืชืงื ื ืืช ืื ืืขืชืื.
ืืืืื
ืืืงื ืืกืคืง ืืช ืืืืืืช ืืืืฅ ืืืืื ืืกืคืจืืื ืืืืื ืื ืืืฉืืื ืืืชื ื-Prometheus. ืืืืืื, ืืืื ื-nginx ืืืื ืืช ืืกืคืจ ืืืชืื ืืื ืชืืืื, ืืื, ืขื ืฉืื ืื ืืกืืื ืฉื ืคืืจืื ืืืืื ืืกืื ืืจืื, ืืช ืืืื ืืฉื ืืืช ืฉื ืืจืฉ ืืืืื. ื ืืชื ืืืืฅ ืืช ืื ืชืื ืื ืืืื ืืืฉืืื ืืืชื ื-Prometheus.
ืืืกืฃ ืงืืข ื ืืกืฃ ื-promtail.yml:
- match:
selector: '{request_type="api"}'
stages:
- metrics:
http_nginx_response_time:
type: Histogram
description: "response time ms"
source: response_time
config:
buckets: [0.010,0.050,0.100,0.200,0.500,1.0]
- match:
selector: '{request_type=~"static|photo"}'
stages:
- metrics:
http_nginx_response_bytes_sum:
type: Counter
description: "response bytes sum"
source: bytes_out
config:
action: add
http_nginx_response_bytes_count:
type: Counter
description: "response bytes count"
source: bytes_out
config:
action: inc
ืืืคืฉืจืืช ืืืคืฉืจืช ืืืืืืจ ืืืขืืื ืืืืื ืขื ืกืื ื ืชืื ืื ืืืืคื ืฉืืืืฆื. ืืืืื ืืื ืืื ื ื ืฉืืืื ืืืืงื - ืื ืืืคืืขืื ืื ืงืืืช ืืงืฆื Promtail /metrics. ืืฉ ืืืืืืจ ืืช ืคืจืืืชืืืก ืืงืื ื ืชืื ืื ืืฉืื ืื. ืืืืืื ืฉืืืขืื, ืขืืืจ request_type="api" ืื ื ืืืกืคืื ืืื ืืืกืืืืจืื. ืขื ืืืืื ืืกืื ืื ื ืื ืืงืื ืืืืืื ืื. ืขืืืจ ืกืืืืืช ืืชืืื ืืช, ืื ื ืืืกืคืื ืืช ืกืืื ืืืชืื ืืืกืคืจ ืืฉืืจืืช ืืื ืงืืืื ื ืืชืื ืืื ืืืฉื ืืช ืืืืืฆืข.
ืงืจื ืขืื ืขื ืืืืื
ืคืชื ืืฆืืื ื-Promtail:
promtail:
image: grafana/promtail:1.4.1
container_name: monitoring.promtail
expose:
- 9080
ports:
- "9080:9080"
ืื ื ืืืืืืื ืฉืืืืืื ืขื ืืงืืืืืช promtail_custom ืืืคืืขื:
ืืงืืช ืคืจืืืชืืืก. ืืืกืฃ ืคืืจืื ืขืืืื:
- job_name: 'promtail'
scrape_interval: 10s
static_configs:
- targets: ['promtail:9080']
ืืชืฆืืืจ ืืจืฃ:
ืื ืชืืื ืืืืืช, ืืืฉื, ืืช ืืจืืข ืืฉืืืืชืืช ืืืืืืืช ืืืืชืจ. ืืชื ืืืื ืื ืืืืืืจ ื ืืืืจ ืขืืืจ ืืืืื ืืื.
ืฉืื ืื ืงื ื ืืืื
ืืืงื ืืืื ืืืืืช ืื ืืืฆื ืืื ืืจื ืืืื ืืื ื-Sharded (ืืฆื ืฉื ืืชื ืืืจืืื ืืืคืงืืช). ืืืงืจื ืืฉื ื, ืืื ืืืื ืืฉืืืจ ื ืชืื ืื ืืขื ื, ืืื ืชืืื ืืืืื ืืงืก ืืืืืกื ืื ืื ืคืจื. ืืืจืกื 1.5 ืืืืฉืืช ืืืืืืช ืืืืกื ืืืงืื ืืื, ืื ืขืืืื ืื ืืืืืฅ ืืืฉืชืืฉ ืื ืืืืฆืืจ.
ื ืืชื ืืืืกื ื ืชืืื ืืืืกืื ืชืืื S3, ืื ืืชื ืืืฉืชืืฉ ืืืกืืกื ื ืชืื ืื ืื ืืชื ืื ืืืจืืื ืืืคืงืืช ืืืืกืื ืืื ืืงืกืื: Cassandra, BigTable ืื DynamoDB. ืืืงืื ืืืจืื ืฉื Loki - ืืคืืฆืื (ืืืชืืื) ื-Querier (ืืฉืืืืชืืช) - ืื ืืกืจื ืืืื ื ืืื ืื ืืืชืืืื ืืจืืื.
ืืื ืก DevOpsDays Vancouver 2019, ืืื ืืืฉืชืชืคืื Callum Styan ืืืืืข โโืื ืขื ืืืงื ืืคืจืืืงื ืฉืื ืืฉ ืคืื-ืืืื ืฉื ืืืื ืื ืขื ืืื ืืงืก ืฉื ืคืืืช ื-1% ืืืืืื ืืืืื: "
ืืฉืืืื ืฉื ืืืงื ื-ELK
ืืืื ืืื ืืงืก
ืืื ืืืืืง ืืช ืืืื ืืืื ืืงืก ืฉืืชืงืื, ืืงืืชื ืืืื ืื ืืืืื nginx ืฉืขืืืจื ืืืืืจ ื-Pipeline ืืขืื. ืงืืืฅ ืืืืื ืืืื 406 ืฉืืจืืช ืื ืคื ืืืื ืฉื 624 MB. ืืืื ืื ื ืืฆืจื ืชืื ืฉืขื, ืืขืจื 109 ืจืฉืืืืช ืืฉื ืืื.
ืืืืื ืืฉืชื ืฉืืจืืช ืืืืืื:
ืืืฉืจ ืืืื ืก ืืืื ืืงืก ืขื ืืื ELK, ืื ื ืชื ืืืื ืืื ืืงืก ืฉื 30,3 MB:
ืืืงืจื ืฉื ืืืงื, ืื ื ืชื ื-128 KB ืฉื ืืื ืืงืก ืื-3,8 MB ืฉื ื ืชืื ืื ืื ืชืืื. ืจืืื ืืฆืืื ืื ืืืืื ื ืืฆืจ ืืืืคื ืืืืืืชื ืืื ืืื ืืืืื ืจืื ืฉื ื ืชืื ืื. gzip ืคืฉืื ืืืืื ื-JSON ืืืงืืจื ืฉื Docker ืขื ื ืชืื ืื ื ืชื ืืืืกื ืฉื 95,4%, ืืืืชืืฉื ืืื ืฉืจืง ืืืื ื-nginx ืื ืืงื ื ืฉืื ืืืืงื ืขืฆืื, ืืืืืกื ื-4MB ืืืื ืช. ืืืกืคืจ ืืืืื ืฉื ืขืจืืื ืืืืืืืื ืขืืืจ ืชืืืืืช ืืืงื ืืื 35, ืื ืฉืืกืืืจ ืืช ืืืืื ืืงืื ืฉื ืืืื. ืขืืืจ ELK, ืื ืืืืื ื ืืงื. ืืคืืื, ืืืงื ืืืก ืืช ืื ืชืื ืื ืืืงืืจืืื ื-96%, ื-ELK ื-70%.
ืฆืจืืืช ืืืืจืื
ืื ื ืฉืืื ืืช ืื ืืขืจืืื ืฉื ืคืจืืืชืืืก ื-ELK, ืื ืืืงื "ืืืื" ืคื ืืื ืคืืืช. ืืจืืจ ืฉืฉืืจืืช Go ืฆืืจื ืคืืืช ืืฉืืจืืช Java, ืืืฉืืืืช ืืืื ื-Heap Elasticsearch JVM ืืืืืืจืื ืฉืืืงืฆื ื-Loki ืืื ื ื ืืื ื, ืื ืขื ืืืช, ืจืืื ืืฆืืื ืฉืืืงื ืืฉืชืืฉ ืืืจืื ืคืืืช ืืืืจืื. ืืชืจืื ืืืขืื ืฉืื ืื ืื ืื ืืจืืจ, ืืื ืืื ืื ืงืืื.
ืืืืจืืช
ืืืงื "ืืืจืฃ" ืืืื ืขืฅ ืืืจ ืืืชืจ. ืืืืืจืืช ืชืืืื ืืืจืื ืืืจืืื - ืืืื ืกืื ืฉื ืืืืื, ืืื ืืชืืืืืื ืื ืื ื ืื ืชืืื ืืืชื, ืจืฉืช, ืืืกืง ืืื' - ืืื ืืื ืืืืื ืืืืื ืืื ืฉื ELK (ืืืืืงื ืฉืื - ืืขืจื ืคื ืฉื ืืื). ืื ืืืกืืจ ืขื ืืื ืืขืืืื ืฉืืืงื ืืื ืืก ืืจืื ืคืืืช ื ืชืื ืื ืืืื ืืงืก ืืืืชืื, ืืืื ืคืืืช ืืื ืืืื ืืงืก. ืืืงืจื ืื, ืืืฆื ืืคืื ืขื ืืืืจืืช ืืืืคืืฉ: ืืืงื ืืื ืืืืคื ื ืืืจ ืื ืชืื ืื ืืืืืื ืืืื ืืืื-ืืืื, ืืขืื ืขืืืจ ELK, ืืืืจืืช ืืืืคืืฉ ืืื ื ืชืืืื ืืืืื ืื ืชืื ืื.
ืืืคืืฉ ืืืื
ืืืงื ื ืืืช ืืฉืืขืืชืืช ื-ELK ืืืืื ืช ืืืืืืช ืืืคืืฉ ืืืืื. ืืจืค ืขื ืืืืืืื ืจืืืืจืืื ืืื ืืืจ ืืืง, ืืื ืื ื ืืืช ืืืกื ื ืชืื ืื ืืืืืืจืื. ืืืขืืจ ืฉืืืืชืืช ืืืื, ืฆืืืจื ืจืง ืืคื ืชืืืืืช, ืืืกืจ ืืืืืืช ืืืคืฉ ืืื ืชืืืืืช - ืื ืื ืืืืื ืืืชื ื ืืืืคืืฉ ืืืจ ืืืืข ืืขื ืืื ืืืืงื. ืื ืื ืืืืจ ืฉืื ื ืืชื ืืืฆืื ืฉืื ืืืจ ืืืืฆืขืืช ืืืงื, ืืื ืื ืืืืืจ ืืช ืืจืืืช ืืขืืืื ืขื ืืืื ืื, ืืืฉืจ ืืชื ืืืฆื ืืขืื ืืจืืฉืื ื ืืชืจืฉืืืื ืฉื ืคืจืืืชืืืก, ืืื ืืืคืฉ ืื ืงืจื ืืืืื ืื ืืืืฆืขืืช ืืชืืืืืช ืืืื.
ืืืฉืง
ืจืืฉืืช, ืื ืืคื (ืกืืืื, ืื ืืืืืชื ืืืชืืคืง). ื-Grafana ืืฉ ืืืฉืง ื ืืื ืืืจืื, ืืื ื-Kibana ืืจืื ืืืชืจ ืคืื ืงืฆืืื ืื.
ืืืงื ืืชืจืื ืืช ืืืกืจืื ืืช
ืืืืชืจืื ืืช, ื ืืชื ืืฆืืื ืฉืืืงื ืืฉืชืื ืขื ืคืจืืืชืืืก, ืืืชืืื, ืื ื ืืงืืืื ืืืืื ืืืชืจืื ืืืืฅ ืืงืืคืกื. ืื ื ืื ืืืืกืืฃ ืืืื ืื ืืืืืกื ื ืขื Kubernetes Pods, ืืืืืื ืฉืืฉ ืื ืืืืื ืฉืืจืืช ืฉืขืืจ ืืืจืืฉื ื-Prometheus ืืืฆืืื ืชืืืืืช ืืืืืืืืช.
ืืืืกืจืื ืืช - ืชืืขืื ืืจืืข. ืืื ืืืจืื, ืืื ืืชืืื ืืช ืืืืืืืืช ืฉื Promtail, ืืืืืชื ืจืง ืืชืืืื ืฉื ืืืืื ืืงืื, ืืช ืืืชืจืื ืฉื ืงืื ืคืชืื. ืืืกืจืื ื ืืกืฃ ืืื ืืืืืืช ืื ืืชืื ืืืืฉืืช. ืืืืืื, ืืืงื ืื ืืืื ืื ืชื ืืืื ืื ืืจืืื ืฉืืจืืช. ืืื ืื, ืืืกืจืื ืืช ืืืืืื ืืช ืืขืืืื ืฉืืืงื ืืื ืืื ืืืืืื ืฆืขืืจื ืืืกืืช (ืืืืืจื 1.0 ืืืืชื ืื ืืืืืจ 2019).
ืืกืงื ื
Loki ืืื ืืื ืืืืืื ืืขื ืืื ืช ืฉื 100% ืืืชืืืื ืืคืจืืืงืืื ืงืื ืื ืืืื ืื ืืื, ืืืืคืฉืจืช ืื ืืคืชืืจ ืืขืืืช ืจืืืช ืฉื ืฆืืืจืช ืืืื ืื, ืืืคืืฉ ืืืื ืื, ื ืืืืจ ืื ืืชืื ืืืื ืื.
ืื ืื ื ืื ืืฉืชืืฉืื ื-Loki ื-Badoo, ืื ืืฉ ืื ื ืืืกื ืืช ELK ืฉืืชืืืื ืื ื ืืฉืืืคืื ืืคืชืจืื ืืช ืืืชืืืื ืฉืื ืื ืืืืจื ืืฉื ืื. ืขืืืจื ื, ืืื ืื ืืฃ ืืื ืืืืคืืฉ ืืืืื ืื. ืขื ืืืขื 100 GB ืฉื ืืืื ืื ืืืื, ืืฉืื ืื ื ืฉื ืืื ืืืฆืื ืืื ืืงืฆืช ืืืชืจ ืืืขืฉืืช ืืืช ืืืืืจืืช. ืืฆืืจื ืชืจืฉืืืื ืื ืืืืจ ืื ื ืืฉืชืืฉืื ืืคืชืจืื ืืช ืืืจืื ืืืืชืืืื ืืฆืจืืื ืฉืื ื ืืืฉืืืืื ืื ืืื. ืืืืกื ืืช Loki ืืฉ ืืชืจืื ืืช ืืืืฉืืื, ืืื ืืื ืื ืชืืชื ืื ื ืืืชืจ ืืื ืฉืืฉ ืื ื, ืืืืชืจืื ืืช ืฉืื ืื ืืืืืง ืืขืื ืขื ืขืืืช ืืืืืจื.
ืืืืจืืช ืฉืืืืจ ืืืงืจ ืืชืืจืจ ืฉืืื ื ื ืืืืืื ืืืฉืชืืฉ ืืืืงื, ืื ื ืืงืืืื ืฉืืคืืกื ืืื ืืขืืืจ ืืื ืืืืืจื.
ืืืืืจ ืขื ืืงืื ืืืฉืืฉ ืืืืืจ ื ืืฆื
ืืงืืจ: www.habr.com