Badoo á០áá»áœááºá¯ááºááá¯á·ááẠáááºážááá¬á¡áá áºáá»á¬ážááᯠá¡áááºáááŒááºá á±á¬áá·áºááŒáá·áºáá±ááŒá®áž áá»áœááºá¯ááºááá¯á·áá áá áºááœáẠáááºážááá¯á·ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááŸáááááŸáááᯠá¡áá²ááŒááºáá±áá«áááºá á€áá±á·áá¬ááŸá¯áá»á¬ážáá²á០áá áºáá¯ááᯠá¡ááá¯ááºážá¡ááá¯ááºážááŸáá·áº áá»áŸáá±ááá¯áá«áááºá ááŸááºáááºážáá±á«ááºážá ááºážááŒááºážá áá ẠLoki á¡ááœáẠáááºááœááºáá«áááºá
Loki ááẠááŸááºáááºážáá»á¬ážááᯠááááºážáááºážááŒááºážááŸáá·áº ááŒáá·áºááŸá¯ááŒááºážá¡ááœáẠááŒá±ááŸááºážáá»ááºáá áºáá¯ááŒá áºááŒá®áž ဠstack ááẠáááºážááá¯á·á¡á¬áž ááá¯ááºážááŒá¬ážá áááºááŒá¬ááŒá®áž Prometheus ááá¯á· áá±áá¬áá±ážááá¯á·ááŒááºážá¡ááœáẠááá¯ááºáá»á±á¬áá®ááœá±ááŸááá±á¬ á áá áºááá¯áááºáž áá±ážáá±á¬ááºáá«áááºá áá±áááœááºá áááºáá®ážáá°áá»á¬ážá០áááºááŒáœá áœá¬ ááŒá±á¬áºááŒá¬áá¬ážááá·áº áá±á¬ááºáááºá¡ááºááááºááᯠáá¯ááºááŒááºáá²á·áááºá Loki áá¯ááºááá¯ááºáááºáá»á¬ážá áááºááá·áºá¡ááºá¹áá«áááºáá»á¬áž áá¶á·ááá¯ážáá±ážááá¯ááºáááºááŸáá·áº ááá¯áá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯áá±ááá·áº stack ELK á á¡á á¬ážááá¯ážáá áºáá¯á¡áá±ááŒáá·áº áááºááá·áºá¡ááá¯ááºážá¡áá¬á¡áá áá¯ááºáá±á¬ááºááá¯ááºáááºááᯠáá»áœááºá¯ááºááá¯á· á áááºáááºá á¬ážáá²á·áá«áááºá
Loki ááá¯áá¬áá¬áá²
Grafana Loki ááẠááŒá®ážááŒáá·áºá á¯á¶áá±á¬ áá áºáá¯ááºááŒááºážá áá áºá¡ááœáẠá¡á áááºá¡ááá¯ááºážáá»á¬ážááŒá áºáááºá á¡ááŒá¬ážá¡áá¬ážáá°á áá áºáá»á¬ážááŸáá·áºááá°áá² Loki ááẠlog metadata áá»á¬áž (Prometheus áá²á·ááá¯á·áááº) á¡ááœáŸááºážáá»á¬áž (Prometheus áá²á·ááá¯á·) áá áºáá¯áááºážáá±á¬ log metadata áá»á¬ážááá¯áá¬á¡ááœáŸááºážááŒá¯áá¯ááºááŒááºážááŸáá·áº logs áá»á¬ážááá¯áá®ážááŒá¬ážá¡áá¯á¶ážáá»á¬ážá¡ááŒá áºááá¯á·áá»á¯á¶á·ááŒááºážá¡áá°á¡áá¡áá±á«áºá¡ááŒá±áá¶áááºá
Loki áá²á· áááºáá¬ááœá±áá¯ááºááá¯ááºáá²ááá¯áá¬ááᯠáá±á¬áºááŒáá»ááºááááºáááºááŸá¬ "áááºáá¬áá±áá¬ááœá±ááá¯áᬠindexing áá¯ááºááŒááºážá áááºáá°áž" á áá¬ááá¯ááá¯ááá¯ááá²ááá¯áá¬ááᯠááŸááºážááŒáá»ááºáá«áááºá nginx ááŸááºáááºážá០á á¬ááŒá±á¬ááºážáá áºáá¯á á¥ááá¬ááᯠá¡áá¯á¶ážááŒá¯á Elasticsearch áá²á·ááá¯á·áá±á¬ ááá¯ážáá¬ááŒá±ááŸááºážáááºážáá»á¬ážááœáẠLoki áá»ááºážáááºááŸá¯ááŸáá·áº á¡ááœáŸááºážááááºážáá»ááºážáááºáááºážááᯠááŸáá¯ááºážááŸááºááŒáá·áºááŒáá«á áá¯á·á
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 áááºááá¯ážáá»á¬ážá áœá¬ááŸáááá·áº á¡ááœááºáá»á¬ážá¡áá«á¡ááẠá¡áááºážáá áºáá¯áá¯á¶ážááᯠááá¯ááºážááŒá¬ážááŒá®áž á¡áá¬á¡á¬ážáá¯á¶ážááᯠááŒá®ážáá¬ážáá±á¬á¡ááœáŸááºážáá»á¬ážááŒáá·áº ááááºážáááºážáá«áááºá á€áá»ááºážáááºááŸá¯á á¡á¬ážáá¬áá»ááºááŸá¬ áá±áá¬á¡á¬ážáá¯á¶ážáá®ážáá«ážááẠá¡ááœáŸááºážááááºážááœáẠááŸááá±áá±á¬ááŒá±á¬áá·áº ááŸá¯ááºááœá±ážáá±á¬áá±ážááœááºážáá»á¬ážááᯠáá»ááºááŒááºá áœá¬ áá¯ááºáá±á¬ááºááá¯ááºááŒááºážááŒá áºáááºá áá«áá±ááá·áº á¡ááœáŸááºážááááºážá ááŒá®ážáá¬ááŒá®áž ááŸááºáá¬ááºááá¯á¡ááºáá»ááºááœá±ááᯠáá¬áá¬ááŒááºáá±ážáá²á·á¡ááœáẠáá®á¡ááœáẠáá±ážáá±á¬ááºáááŸá¬ ááŒá áºáá«áááºá ááááºá¡áá±ááŒáá·áºá ááŸááºáááºážáá»á¬ážá á á¬áá¬ážá¡ááœáŸááºážá¡ááŒáá·áºá¡á á¯á¶ááẠááŸááºáááºážáá»á¬ážááá¯ááºááá¯áẠá¡ááœááºá¡á á¬ážááŸáá·áº ááŸáá¯ááºážááŸááºááá¯ááºáááºá áááºážááᯠáá»ááºááŒááºá áœá¬ ááŸá¬ááœá±ááá¯ááºáááºá á¡ááœáŸááºážááᯠááŸááºáá¬ááºáá²ááá¯á· ááá·áºááœááºážááá«áááºá ááŸááºáááºážáá»á¬áž áá»á¬ážáá¬áá±á á¡ááœáŸááºážááááºáž ááá¯ážáá± ááŒááºáá±áá±á áááºážááẠááŸááºáá¬áẠááá¯áá¯á¶ážá áœá²áá± ááŒá áºáááºá
Loki áá»ááºážáááºááŸá¯ááẠstring á០ááá¯á¡ááºáá±á¬ á¡áá»ááºá¡áááºáá»á¬ážááá¯áᬠáá¯ááºáá°ááẠááá¯á¡ááºááŒá®áž áááºááá¯ážáá»á¬áž áá±ážáááºáááºá á€áááºážááŒáá·áº áá»áœááºá¯ááºááá¯á·ááẠá¡ááœáŸááºážáááºáá áºáá¯áááá¯ááºááŒá®áž áááºážááᯠá¡áá»áááºááŸáá·áº á¡ááœáŸááºážáááºáá¬ážáá±á¬ á¡ááœááºáá»á¬ážááᯠá á áºáá¯ááºááŒááºážááŒáá·áº áá±áá¬ááᯠááŸá¬ááœá±ááá¯ááºááŒá®áž áá»ááºááᯠáá¯á¶ááŸááºá¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬áž ááá¯á·ááá¯áẠá á¬áááºážááœá²ááŸá¬ááœá±ááŸá¯áá»á¬ážááŒáá·áº á áááºááºáááºááá¯ááºáááºá áá¯ááºáááºážá ááºááẠá¡áá»ááºááŒááºáá¯á¶ážáá¯áááºááá±á¬áºáááºáž Loki ááẠáá±á¬ááºážááá¯ááŸá¯ááᯠá¡ááá¯ááºážáá»á¬ážá áœá¬ááœá²áᬠáááºážááá¯á·á¡á¬áž ááŒáá¯ááºáá°áá¯ááºáá±á¬ááºáᬠá¡áá»áááºááá¯á¡ááœááºáž áá±áá¬ááá¬áá¡áá»á¬ážá¡ááŒá¬ážááᯠáá¯ááºáá±á¬ááºáááºá áááºážááá¯á·ááœáẠshards ááŸáá·áº parallel áá±á¬ááºážááá¯ááŸá¯á¡áá±á¡ááœááºááᯠááŒááºáááºáááºááŸááºááá¯ááºáááºá ááá¯á·ááŒá±á¬áá·áºá á¡áá»áááºáá°áá áºá¡ááá¯áẠá á®áá¶áá±á¬ááºááœááºááá¯ááºáá±á¬ áá±áá¬ááá¬áááẠáá¶á·ááá¯ážáá±ážáá¬ážááá·áº á¡áááºážá¡ááŒá áºááá¬áá¡áá±á«áº áá»ááºážáá¬ážá áœá¬ áá°áááºáá«áááºá
ááŒá®ážáá¬ážáá±á¬á¡ááŒááºá¡ááœáŸááºážááááºážááŸáá·áº áá±ážáááºáá±á¬á¡ááŒáá¯áẠbrute-force á¡ááœáŸááºážááŒá¬ážááœáẠá€á¡áá±ážá¡áá°ááẠLoki ááẠá áá áºááá¯ááºáá»á ááááºááᯠááááºážáá»á¯ááºááá¯ááºá á±áááºá áááºážááᯠááá·áºááá¯á¡ááºáá»ááºá¡á ááá¯ááºáá»á±á¬áá®ááœá±ááŒá áºá¡á±á¬áẠááŒááºáááºááŒá®áž áá»á²á·ááá¯ááºáááºá
Loki stack ááœáẠPromtailá Lokiá Grafana áá°á á¡á
áááºá¡ááá¯ááºáž á áᯠáá«áááºáááºá Promtail ááẠááŸááºáááºážáá»á¬ážááᯠá
á¯áá±á¬ááºážááŒá®áž áááºážááá¯á·ááᯠáá¯ááºáá±á¬ááºááŒá®áž Loki ááá¯á· ááá¯á·áá±ážáááºá Loki á áá°ááá¯á·ááᯠá
á±á¬áá·áºááŸá±á¬ááºáááºá Grafana ááẠLoki áá¶á០á¡áá»ááºá¡áááºáá»á¬ážááᯠáá±á¬ááºážááá¯ááá¯ááºááŒá®áž áááºážááᯠááŒáááá¯ááºáááºá áá±áá¯áá»á¡á¬ážááŒáá·áº Loki ááᯠááŸááºáááºážáá»á¬áž ááááºážáááºážááŒááºážááŸáá·áº áááºážááá¯á·ááᯠááŸá¬ááœá±ááŒááºážá¡ááœááºáá¬áááá² á¡áá¯á¶ážááŒá¯ááá¯ááºáááºá á¡á
á¯á¡á
ááºážáá
áºáá¯áá¯á¶ážááẠPrometheus áááºážáááºážááᯠá¡áá¯á¶ážááŒá¯á á¡áááºáá±áá¬ááᯠá
á®áá¶áá±á¬ááºááœááºááŒááºážááŸáá·áº ááœá²ááŒááºážá
áááºááŒá¬ááŒááºážá¡ááœáẠá¡ááœáá·áºá¡áááºážáá±á¬ááºážáá»á¬ážáá±ážáááºá
áááºáááºááŒááºážáá¯ááºáááºážá
ááºá ááŸááºážáááºážáá»ááºá¡á¬áž ááœá±á·ááŸáááá¯ááºáááºá
ááŸááºáááºážááŸá¬ááœá±ááŸá¯
ááŸááºáááºážáá»á¬ážááᯠá¡áá°ážá¡ááºáá¬áá±á·á ẠGrafana â Explorer ááœáẠáááºááŸá¬ááœá±ááá¯ááºáááºá á á¯á¶á ááºážááŸá¯áá»á¬ážááẠPrometheus á¡áá¯á¶ážááŒá¯áá±á¬ PromQL ááŸáá·áº á¡ááœááºáááºáá°ááá·áº LogQL áá¬áá¬á áá¬ážááᯠá¡áá¯á¶ážááŒá¯áááºá áá°á¡áá áááºážááᯠááŒáá·áºáá±ááá·áº grep á¡ááŒá Ạáá°áááá¯ááºáááºá
ááŸá¬ááœá±ááŸá¯ á¡ááºáá¬áá±á·á áºááẠá€áá²á·ááá¯á· ááŒá áºáááº-
á á¯á¶á ááºážááŸá¯ááœáẠá¡ááá¯ááºážááŸá áºááá¯ááºážáá«áááºáááº- ááœá±ážáá»ááºáá°ááŸáá·áº á á áºáá¯ááºááŸá¯á Selector ááẠááŸááºáááºážáá»á¬ážááœáẠáááºááŸááºáá±ážáá¬ážáá±á¬ á¡ááœáŸááºážááŸááºáá¬ážáá±á¬ áááºáá¬áá±áᬠ(á¡ááœáŸááºážáá»á¬áž) ááŒáá·áº ááŸá¬ááœá±ááŸá¯áá áºáá¯ááŒá áºááŒá®áž á á áºáá¯ááºááŸá¯ááẠááœá±ážáá»ááºáá°á០áááºááŸááºáá¬ážáá±á¬ ááŸááºáááºážáá»á¬ážááᯠá á áºáá¯ááºááá·áº ááŸá¬ááœá±áá±ážá á¬ááŒá±á¬ááºáž ááá¯á·ááá¯áẠregexp ááŒá áºáááºá áá±ážáá¬ážáá±á¬á¥ááá¬ááœááº- curly brackets ááœáẠ- ááœá±ážáá»ááºáá°á á¡á¬ážáá¯á¶ážááŒá®ážáá±á¬áẠ- filter ááá¯á
{image_name="nginx.promtail.test"} |= "index"
Loki á¡áá¯ááºáá¯ááºáá¯á¶ááŒá±á¬áá·áºá ááœá±ážáá»ááºááá·áºáááááá¬ááá«áá² áá±á¬ááºážááá¯ááŸá¯áá»á¬áž ááŒá¯áá¯ááºááááá±á¬áºáááºáž á¡ááœáŸááºážáá»á¬ážááᯠááá¯ááºáááºá á®ážáááºážááŒá¯áá¯ááºááá¯ááºáááºá
ááœá±ážáá»ááºáá°ááẠáá±á¬ááºáá±á¬ááºáá±á¬ááºáá±á¬ááºáá»á¬ážááœáẠáááºááá¯ážááá±á¬á·áááºááá¯ážááŒá áºáááºá =, != á¡á±á¬áºááá±áá¬áá»á¬áž ááá¯á·ááá¯áẠáá¯á¶ááŸááºá¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á ááá°áá®áá±á¬ ááŸá¬ááœá±ááŸá¯á¡ááŒá±á¡áá±áá»á¬ážááᯠáááºáá±á«ááºážá ááºáááºááŸááºááá¯ááºáááº-
{instance=~"kafka-[23]",name!="kafka-dev"}
// ÐайЎÑÑ Ð»ÐŸÐ³Ðž Ñ Ð»ÐµÐ¹Ð±Ð»ÐŸÐŒ instance, ОЌеÑÑОе зМаÑеМОе kafka-2, kafka-3, О ОÑклÑÑÐžÑ dev
á á áºáá¯ááºááŸá¯ááẠááœá±ážáá»ááºáá°ááŸáááŸááá±á¬áá±áá¬á¡á¬ážáá¯á¶ážááᯠá á áºáá¯ááºááá·áº á á¬áá¬áž ááá¯á·ááá¯áẠregexp ááŒá áºáááºá
áááºááá áºáá¯ááºááœáẠáááºáá¶áááŸáááá·áºáá±áá¬á¡áá±á«áºá¡ááŒá±áá¶á ad-hoc ááááºáá áºáá»á¬ážááᯠáááŸáááá¯ááºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá á¡ááœáŸááºážá á¬áááºážáá«ááŸááá±á¬ entry á nginx ááŸááºáááºážáá»á¬ážááœáẠááŒá áºáá»ááºááŸá¯á¡ááŒáááºáá±ááᯠááŸá¬ááœá±á·ááá¯ááºáááº-
á¡ááºá¹áá«áááºáá»á¬ážá¡ááŒá±á¬ááºáž á¡ááŒáá·áºá¡á
á¯á¶ááᯠá
á¬ááœááºá
á¬áááºážáá»á¬ážááœáẠááœá±á·ááá¯ááºáá«áááºá
ááŸááºáááºáž ááá¯ááºážááŒá¬ážááŒááºážá
ááŸááºáááºážáá»á¬áž á á¯áá±á¬ááºážááẠáááºážáááºážáá»á¬ážá áœá¬ ááŸááá«áááºá
- ááŸááºáááºážáá»á¬ážá á¯áá±á¬ááºážááŒááºážá¡ááœáẠstack áá á¶á¡á áááºá¡ááá¯ááºážáá áºáá¯ááŒá áºáá±á¬ Promtail áá¡áá°á¡áá®ááŒáá·áºá
- docker container á០ááá¯ááºááá¯ááºá¡áá¯á¶ážááŒá¯ááŒááºážá
Loki Docker Logging Driver - Loki ááá¯á·áá±áá¬áá±ážááá¯á·ááá¯ááºááá·áº Fluentd ááá¯á·ááá¯áẠFluent Bit ááá¯áá¯á¶ážáá«á Promtail ááŸáá·áºááá°áá²á áááºážááá¯á·ááœáẠááŸááºáááºážá¡áá»áá¯ážá¡á á¬ážááá¯ááºážáá®ážáá«ážá¡ááœáẠá¡áááºááá·áºáá¯ááºáá¬ážáá±á¬ ááœá²ááŒááºážá áááºááŒá¬ááŸá¯áá»á¬ážááŸáááŒá®áž ááá¯ááºážáá»á¬ážá áœá¬ááŸááºáááºážáá»á¬ážááᯠááá¯ááºááœááºááá¯ááºáááºá
á¡áá»á¬ážá¡á¬ážááŒáá·áº Promtail ááᯠááœá²ááŒááºážá áááºááŒá¬ááẠá¡áá¯á¶ážááŒá¯áááºá áááºážáááºá¡áá¬áá¯á¶ážáá¯ááá¯áá¯ááºáá±á¬ááºáááº
- áá±áá¬á¡áááºážá¡ááŒá áºáá»á¬ážááá¯ááŸá¬áá«á
- áááºážááá¯á·áᶠá¡ááœáŸááºážáá»á¬áž áá»áááºáá«á
- áá±áá¬áá»á¬ážááᯠLoki ááá¯á·áá±ážááá¯á·áááºá
áá±á¬áá±á¬ááẠPromtail ááẠááŒááºááœááºážááá¯ááºáá»á¬ážááŸáá·áº systemd áá»á¬áááºá០ááŸááºáááºážáá»á¬ážááᯠáááºááá¯ááºáááºá ááŸááºáááºážáá»á¬áž á á¯áá±á¬ááºážááá·áº á ááºááá¯ááºážááœáẠáááºážááᯠááá·áºááœááºážááá«áááºá
Kubernetes ááŸáá·áº áá±á«ááºážá ááºážááŸá¯ ááŸááá±áááº- Promtail ááẠKubernetes REST API ááŸáááá·áº á¡á á¯á¡áá±ážá á¡ááŒá±á¡áá±ááᯠá¡ááá¯á¡áá»á±á¬áẠááŸá¬ááœá±ááŒá®áž nodeá áááºáá±á¬ááºááŸá¯ ááá¯á·ááá¯áẠpod á០ááŸááºáááºážáá»á¬ážááᯠá á¯áá±á¬ááºážáᬠKubernetes á០áááºáá¬áá±áá¬ááᯠá¡ááŒá±áá¶á á¡ááœáŸááºážáá»á¬áž áá»ááºáá»ááºážáááºááŒááºáž (pod á¡áááºá ááá¯ááºá¡ááẠá áááºááŒáá·áº)á
ááá¯ááºááá¯ááºážááᯠá¡áá¯á¶ážááŒá¯á ááŸááºáááºážá០á¡áá»ááºá¡áááºáá»á¬ážá¡áá±á«áº á¡ááŒá±áá¶á á¡ááœáŸááºážáá»á¬ážááᯠáá»áááºááœá²ááá¯ááºáááºá Pipeline Promtail ááẠá¡ááá·áºáá±ážáá»áá¯áž áá«áááºááá¯ááºáááºá á¡áá±ážá
áááºá¡áá»ááºá¡áááºáá»á¬ážááᯠáááºáá±á¬ááºááŒáá·áºááŸá¯ááá¯ááºáá«áááºá
- á¡ááá·áºááá·áºááœá²ááŒááºážá áááºááŒá¬ááŒááºážá. á€áááºááŸá¬ RegEx ááŸáá·áº JSON á á¡ááá·áºááŒá áºáááºá á€á¡ááá·áºááœááºá áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºáá°áá¬ážáá±á¬ááŒá±áá¯á¶áá¯áá±á«áºáá±á¬ ááŸááºáááºážáá»á¬ážá០á¡áá»ááºá¡áááºáá»á¬ážááᯠáá¯ááºáá°áá«áááºá áá¯ááºáá°áá¬ážáá±á¬ááŒá±áá¯á¶ááá¯á·áá»áœááºá¯ááºááá¯á·ááá¯á¡ááºáá±á¬á¡ááœááºáá»á¬ážááá¯áá°ážáá°áá¯á¶ááŒáá·áº JSON ááŸáá¯ááºáá°ááá¯ááºááẠááá¯á·ááá¯áẠáá¯á¶ááŸááºá¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬áž (RegEx) ááŸáááá·áºá¡áááºáááºáá¬ážáá±á¬á¡ááœá²á·áá»á¬ážááá¯áá¯ááºáá°áá¬ážáá±á¬ááŒá±áá¯á¶ááá¯á· "ááŒá±áá¯á¶ááœá²áá¬ážáááº" áá±áá¬ááœááºáá¯ááºáá°ááá¯ááºáááºá áá¯ááºáá°áá¬ážáá±á¬ááŒá±áá¯á¶ááẠáá±á¬á·áááºááá¯ážááá¯ááŸá±á¬ááºááŸá¯ááŒá áºááŒá®áž áá±á¬á·ááẠá¡ááœááºá¡áááºááŒá áºááŒá®áž áááºááá¯ážááẠááŸááºáááºážáá»á¬ážá០áááºážááááºááá¯ážááŒá áºáááºá
- á¡ááá·áºááá·áºááŒá±á¬ááºážáá²áá«á. á€á¡ááá·áºááœáẠááœá±ážáá»ááºá
áᬠááŸá
áºáá¯ááŸááááº- á¡ááœááºááŒá±á¬ááºážáááºá áá»áœááºá¯ááºááá¯á· áááºááŸááºááá·áº á¡ááœááºááŒá±á¬ááºážááŒááºážááá¯ááºáᬠá
ááºážáá»ááºážáá»á¬ážááŸáá·áº á¡áááºážá¡ááŒá
Ạ- áá¯ááºáá°áá¬ážáá±á¬ ááŒá±áá¯á¶á០á¡ááœááºááŒá±á¬ááºážááŒááºážá¡ááœáẠáá±áá¬á¡áááºážá¡ááŒá
áºá áá¯ááºáá°áá¬ážáá±á¬ááŒá±áá¯á¶ááœáẠááá¯ááá¯á·áá±á¬á¡ááœááºáááŸááá«áá áááºážááᯠáááºáá®ážáááºááŒá
áºáááºá ááá¯á·ááŒá±á¬áá·áºá áá¯ááºáá°áá¬ážáá±á¬ááŒá±áá¯á¶áá±á«áºááœááºá¡ááŒá±áá¶ááŒááºážáááŸááá±á¬á¡ááœáŸááºážáá»á¬ážááá¯áááºáá®ážááá¯ááºáááºá á€á¡ááá·áºááœááºá áá»áœááºá¯ááºááá¯á·ááẠá¡ááœááºá¡á
áœááºážáááºáá±á¬ áá¯ááºáá°áá¬ážáá±á¬ááŒá±áá¯á¶ááᯠá¡áá¯á¶ážááŒá¯á áá±áá¬ááᯠááá¯ááºááœááºááá¯ááºáááºá
Golang áá¯á¶á á¶ááœáẠ. ááá¯á·á¡ááŒááºá ááœá²ááŒááºážá áááºááŒá¬á ááºá¡ááœááºáž áá¯ááºáá°áá¬ážáá±á¬ááŒá±áá¯á¶ááᯠá¡ááŒáá·áºá¡ááááºáá¬ážááŒá±á¬ááºáž ááŸááºáá¬ážáá¬ážááááºááŒá áºááŒá®ážá á¥ááá¬á¡á¬ážááŒáá·áº áááºážááŸááááºááá¯ážááᯠá á áºáá±ážááẠááŒá áºááá¯ááºáááº- â{{if .tag}tag áááºááá¯ážááŸááá«áááº{end}}âá ááá°áá¬áá¯á¶á á¶ááẠá¡ááŒá±á¡áá±áá»á¬ážá ááœááºážáááºáá»á¬ážááŸáá·áº á¡á á¬ážááá¯ážááŒááºážááŸáá·áº ááŒááºáá±á¬ááºááŒááºážáá²á·ááá¯á·áá±á¬ string function á¡áá»áá¯á·ááᯠáá¶á·ááá¯ážáá±ážáááºá - áá¯ááºáá±á¬ááºáá»ááºá¡ááá·áºááá·áº. á€á¡ááá·áºááœááºá áááºááẠáá¯ááºáá°áá¬ážáá±á¬ á¡áá¬áá
áºáá¯áá¯ááᯠáá¯ááºáá±á¬ááºááá¯ááºáááº-
- Loki á០á¡ááœáŸááºážáá±ážááá·áº áá¯ááºáá°áá¬ážáá±á¬ áá±áá¬á០á¡ááœáŸááºážáá áºáᯠáááºáá®ážáá«á
- ááŸááºáááºážá០á¡ááŒá áºá¡áá»ááºá¡áá»áááºááᯠááŒá±á¬ááºážáá« ááá¯á·ááá¯áẠáááºááŸááºáá«á
- Loki ááá¯á·ááœá¬ážááá·áº áá±áᬠ(ááŸááºáááºážá á¬áá¬áž) ááᯠááŒá±á¬ááºážáá«á
- ááá¯ááºážáá¬ááŸá¯áá»á¬áž ááŒá¯áá¯ááºáá«á
- á¡ááá·áºááá·áºá á®á á áºááŒááºážá. áá»áœááºá¯ááºááá¯á·ááẠ/dev/null áááá¯á¡ááºáá±á¬ ááŸááºáááºážáá»á¬ážááᯠáá±ážááá¯á·ááá¯ááºááẠááá¯á·ááá¯áẠáááºážááá¯á·ááᯠáááºáááºáá¯ááºáá±á¬ááºáááºá¡ááœáẠáááºážááá¯á·ááᯠáá±ážááá¯á·ááá¯ááºááá·áº ááœá²á ááºá¡ááá·áºá
áá¬ááẠnginx ááŸááºáááºážáá»á¬ážááᯠáá¯ááºáá±á¬ááºááŒááºážáááá°áá¬ááᯠá¡áá¯á¶ážááŒá¯á Promtail ááᯠá¡áá¯á¶ážááŒá¯á ááŸááºáááºážáá»á¬ážááᯠáááºáááºáá²á·ááá¯á· ááœá²ááŒááºážá áááºááŒá¬ááá¯ááºáááºááᯠáá»áœááºá¯ááºááŒááá«áááºá
á ááºážáááºááŸá¯á¡ááœááºá ááŒááºáááºáá¬ážáá±á¬ nginx jwilder/nginx-proxy:alpine áá¯ááºáá¯á¶ááŸáá·áº nginx-proxy á¡ááŒá ẠHTTP ááŸáá áºááá·áº áá°á·áá¬áá¬áá° á á¯á¶á ááºážááá¯ááºáá±á¬ daemon á¡áá±ážáá áºáá¯ááᯠáá°ááá¯ááºááŒáá«á áá¯á·á daemon ááœáẠááá°áá®áá±á¬ á¡ááœááºá¡á á¬ážá ááá°áá®áá±á¬ HTTP á¡ááŒá±á¡áá±áá»á¬ážááŸáá·áº ááá°áá®áá±á¬ ááŸá±á¬áá·áºááŸá±ážááŸá¯áá»á¬ážááŸáá·áºá¡áá° á¡ááœááºá¡á á¬ážá¡áá»áá¯ážáá»áá¯ážá áá¯á¶á·ááŒááºááŸá¯áá»á¬ážááᯠáá±ážá áœááºážááá¯ááºáá±á¬ daemon á¡áá»á¬ážá¡ááŒá¬ážááŸááááºá
/var/lib/docker/containers/ áááºážááŒá±á¬ááºážáá áºáá»áŸá±á¬ááºááœáẠááœá±á·ááŸáááá¯ááºááá·áº docker containers áá»á¬ážá០ááŸááºáááºážáá»á¬ážááᯠá á¯áá±á¬ááºážáá«áááºá / -json.log
docker-compose.yml ááœááºáá»áœááºá¯ááºááá¯á·ááẠPromtail ááá¯áááºáá±á¬ááºááŒá®áž config ááá¯á·áááºážááŒá±á¬ááºážááá¯áááºááŸááºáááº-
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 ááá¯á· ááŸááºáááºážáá»á¬ážáá²ááá¯á· áááºážááŒá±á¬ááºážááᯠááá·áºáá« (á á¬ááŒá±á¬ááºážáá áºááŒá±á¬ááºážáááºážááœáẠáá°áá®áá±á¬ config ááœáẠ"docker" ááœá±ážá áá¬áá áºáᯠááŸááááºá ááá¯á·áá±á¬áº áááºážááẠá¡ááœááºáááºááŸá¬ážáááºááá¯ááºáá«)á
scrape_configs:
- job_name: containers
static_configs:
labels:
job: containerlogs
__path__: /var/lib/docker/containers/*/*log # for linux only
á€ááœá²á·á ááºážáá¯á¶ááᯠááœáá·áºáá¬ážáá±á¬á¡áá«á Loki ááẠááœááºááááºáá¬á¡á¬ážáá¯á¶ážá០ááŸááºáááºážáá»á¬ážááᯠáááºáá¶áááŸááááºááŒá áºáááºá áááºážááá¯ááŸá±á¬ááºááŸá¬ážáááºá docker-compose.yml ááœáẠá ááºážááẠnginx ááááºáááºáá»á¬ážááᯠáá»áœááºá¯ááºááá¯á·ááŒá±á¬ááºážáá²ááá¯ááºááẠ- tag á¡ááœááºááá¯á· ááŸááºáááºážááá·áºááŒááºáž-
proxy:
image: nginx.test.v3
//âŠ
logging:
driver: "json-file"
options:
tag: "{{.ImageName}}|{{.Name}}"
promtail.yml ááᯠáááºážááŒááºááŒá®áž ááá¯ááºááá¯ááºážááᯠá áá áºááá·áºááœááºážáá«á ááŸááºáááºážáá»á¬ážááŸá¬ á¡á±á¬ááºáá«á¡ááá¯ááºážááŒá áºáááºá
{"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
áá»áœááºá¯ááºááá¯á·ááẠá¡ááẠJSON á០stream, attrs, attrs.tag á¡ááœááºáá»á¬áž (ááŸááá«á) ááᯠáá¯ááºáá°ááŒá®áž áááºážááá¯á·ááᯠáá¯ááºáá°áá¬ážáá±á¬ááŒá±áá¯á¶ááœáẠááá·áºááœááºážáá«á
- regex:
expression: ^(?P<image_name>([^|]+))|(?P<container_name>([^|]+))$
source: "tag"
áá¯ááºáá°áá¬ážáá±á¬ááŒá±áá¯á¶ááœáẠtag á¡ááœááºááᯠááá·áºáá¬ážááá¯ááºáá»áŸáẠregexp ááá¯á¡áá¯á¶ážááŒá¯á áá¯á¶ááŸáá·áº container áá¡áááºáá»á¬ážááᯠáá¯ááºáá°áá«á
- labels:
image_name:
container_name:
áá¶ááááºáá»á¬áž áááºááŸááºáá±ážáá«áááºá áá¯ááºáá°áá¬ážáá±á¬áá±áá¬ááœáẠáá±á¬á·áá»á¬ážááᯠimage_name ááŸáá·áº container_name ááá¯ááœá±á·ááŸááá«áá áááºážááá¯á·ááááºááá¯ážáá»á¬ážááᯠááá·áºáá»á±á¬áºáá±á¬á¡ááœáŸááºážáá»á¬ážááœáẠáááºááŸááºáá±ážáááºááŒá áºáááºá
- match:
selector: '{job="docker",container_name="",image_name=""}'
action: drop
image_name ááŸáá·áº container_name á¡ááœáŸááºážáá»á¬áž áááºááŸááºááŒááºáž áááŸááá±á¬ ááŸááºáááºážá¡á¬ážáá¯á¶ážááᯠáá»áœááºá¯ááºááá¯á· áááºáá áºáá«áááºá
- match:
selector: '{image_name="nginx.promtail.test"}'
stages:
- json:
expressions:
row: log
image_name ááẠnginx.promtail.test ááŸáá·áº áá®áá»áŸááá·áº ááŸááºáááºážá¡á¬ážáá¯á¶ážá¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠá¡áááºážá¡ááŒá áºááŸááºáááºážá០ááŸááºáááºážá¡ááœááºááᯠáá¯ááºáá°ááŒá®áž áá¯ááºáá°áá¬ážáá±á¬ááŒá±áá¯á¶ááœáẠá¡áááºážáá±á¬á·ááŒáá·áº ááá·áºáá¬ážáááºá
- regex:
# suppress forego colors
expression: .+nginx.+|.+[0m(?P<virtual_host>[a-z_.-]+) +(?P<nginxlog>.+)
source: logrow
áá»áœááºá¯ááºááá¯á·ááẠáá¯á¶ááŸááºá¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬ážááŒáá·áº ááá·áºááœááºážááá·áºá á¬ááŒá±á¬ááºážááᯠááŸááºážáááºážááŒá®áž nginx virtual host ááŸáá·áº 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>[^/?.]+).*$
áá±á¬ááºážááá¯ááŸá¯_url ááá¯ááœá²ááŒááºážá áááºááŒá¬áá«á regexp áá¡áá°á¡áá®ááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠáá±á¬ááºážááá¯áá»ááºááááºááœááºáá»ááºááᯠáá¯á¶ážááŒááºáááº- staticsá áá¬ááºáá¯á¶áá»á¬ážáá®ááá¯á·á 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 á¡ááœááºá¡ááœáẠááá¯á¡ááºáá±á¬áááºááá¯ážáá»á¬áž- áá¬ááºáá¯á¶á ááŒáááºá APIá áá¡á±á¬ááºááŒááºáá«á á¡ááŒá¬ážáá°ááᯠáá¬áááºáá±ážáá«á ááᯠRequest_type ááœáẠáá±á¬ááºážááá¯ááŸá¯á¡áá»áá¯ážá¡á á¬ážáá«ááŸááááºá
- labels:
api_request:
virtual_host:
request_type:
status:
áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºáá°áá¬ážáá±á¬ááŒá±áá¯á¶ááœáẠááá·áºááœááºážáá¬ážáá±á¬á¡áá¬á¡áá±á«áº á¡ááŒá±áá¶á api_requestá virtual_hostá request_type ááŸáá·áº á¡ááŒá±á¡áá± (HTTP á¡ááŒá±á¡áá±) ááᯠáááºááŸááºáá«áááºá
- output:
source: nginx_log_row
á¡ááœááºááᯠááŒá±á¬ááºážáá«á ááá¯á¡áá« áá¯ááºáá°áá¬ážáá±á¬ ááŒá±áá¯á¶á០ááá·áºá ááºáá¬ážáá±á¬ nginx ááŸááºáááºážááẠLoki ááá¯á· ááœá¬ážáá«áááºá
á¡áááºáá±á¬áºááŒáá« config ááᯠrun ááŒá®ážáá±á¬ááºá áááºáá±á¬ááºááŸá¯áá áºáá¯á á®ááẠlog ááŸáá±áá¬á¡áá±á«áºá¡ááŒá±áá¶á á¡ááœáŸááºážáááºáá¬ážáááºááá¯ááœá±á·ááŒááºááá¯ááºáááºá
áááºááá¯ážáá»á¬ážá
áœá¬ (cardinality) ááŒáá·áº á¡ááœáŸááºážáá»á¬ážááᯠáá¯ááºáá°ááŒááºážááẠLoki ááᯠáááááá¬áᬠááŸá±ážááœá±ážá
á±áááºáᯠááŸááºáá¬ážáá¬ážáá«á ááá¯ááá¯áááºááŸá¬á á¥ááá¬á user_id ááᯠá¡ááœáŸááºážááœáẠáááá·áºááá·áºáá«á áá±á¬ááºážáá«ážááœáẠá€á¡ááŒá±á¬ááºážááá¯ááá¯áááºáá«á
ááŸááºáááºážáá¯á¶áá±á¬áºááŒááºážá
Loki ááẠLogQL ááᯠá¡áá¯á¶ážááŒá¯á Grafana ááá¬ážáá»á¬ážá¡ááœáẠáá±áá¬áááºážááŒá áºáá áºáá¯á¡ááŒá Ạáá¯ááºáá±á¬ááºááá¯ááºáááºá á¡á±á¬ááºáá«á¡ááºá¹áá«áááºáá»á¬ážááᯠáá¶á·ááá¯ážáá¬ážáááº-
- ááŸá¯ááºáž - áá áºá áá¹ááá·áºáá»áŸááºááŸááºáááºážá¡áá±á¡ááœááº;
- á¡áá»áááºááŸáá·áºá¡áá»áŸ áá±ááœááºááŒááºáž - áá±ážáá¬ážáá±á¬ á¡ááœá¬á¡áá±ážááŸá ááŸááºáááºážá¡áá±á¡ááœááºá
Sumá Avg ááŸáá·áº á¡ááŒá¬ážáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá á¯á ááºážáá±ážáá«áááºá áááºááẠá¡áá±á¬áºáá±áž ááŸá¯ááºááœá±ážáá±á¬ ááááºáá»á¬ážááᯠáááºáá®ážááá¯ááºáááºá á¥ááá¬á HTTP á¡ááŸá¬ážá¡ááœááºáž á¡áá±á¡ááœááºá ááááºáá áº
Loki á áá°áááºážáá±áá¬áááºážááŒá
áºááẠPrometheus ááá±áá¬áááºážááŒá
áºááẠá¡áááºážáááºáá¯ááºáá±á¬ááºááá¯ááºá
áœááºážáááºážáá«ážááẠ(á¥ááá¬á ááá¹áá¬áá®ááᯠáááºááŒá±á¬ááºážáá²ááááá«)á ááá¯á·áá±á¬áº Loki ááẠPrometheus á¡áá»áá¯ážá¡á
á¬ážá¡áááºážá¡ááŒá
áºá¡ááŒá
Ạáá»áááºáááºááá¯ááºáááºá áá«á ááŸááºáááºážáááºáá¬ážáá²á· á¡ááŒá¯á¡áá° áá¯ááºááá¯ááºáá±á¬á· ááá±áá»á¬áá«áá°ážá áá«áá±ááá·áº developer ááœá±áá²á· áá¯á¶á·ááŒááºááŸá¯ááᯠááŒáá·áºááŒá®áž áá¯á¶ážááŒááºáá¬áá«"
Prometheus á¡áá»áá¯ážá¡á á¬ážááŒáá·áº Loki ááᯠáá±áá¬áááºážááŒá áºá¡ááŒá Ạááá·áºááœááºážááŒá®áž URL /loki ááᯠáááºááá·áºáá«-
Prometheus á០áááºááá áºáá»á¬ážááŸáá·áº á¡áá¯ááºáá¯ááºáá±ááá²á·ááá¯á· áááºááẠááááºáá»á¬ážááᯠáááºáá®ážááá¯ááºáááº-
áá¯ááºáá±á¬ááºááá¯ááºá áœááºáž ááœá¬ááá»ááºááẠáá¬áá®ááŒá áºááŒá®áž áá±á¬á·ááºáá²á¡ááºáá»ááºáá®áá¬áá»á¬ážá áááºážááᯠá¡áá¬áááºááœáẠááŒá¯ááŒááºáá±ážáááºáᯠáááºáá«áááºá
áááºááá áºáá»á¬áž
Loki ááẠááŸááºáááºážáá»á¬ážá០ááááºážááá¬ááºážáááºááá áºáá»á¬ážááᯠáá¯ááºáá°ááŒá®áž Prometheus ááá¯á· áá±ážááá¯á·ááá¯ááºá á±áá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá nginx ááŸááºáááºážááœáẠáá¯á¶á·ááŒááºááŸá¯áá áºáá¯áá»áŸáẠbytes á¡áá±á¡ááœááºáá«ááŸáááŒá®ážá á á¶ááŸááºáááºážáá±á¬áºáááºá á¡áá»áá¯á·áá±á¬ááœááºážáá¶ááŸá¯áá»á¬ážááŸáá·áºá¡áá°á áá¯á¶á·ááŒááºááẠá¡áá»áááºá áá¹ááá·áºááá¯ááºážá¡ááœááºáž áá«áááºáááºá á€áá±áá¬ááᯠáá¯ááºáá°ááŒá®áž 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
ááœá±ážáá»ááºááœáá·áºááẠáá¯ááºáá°áá¬ážáá±á¬ááŒá±áá¯á¶á០á¡áá»ááºá¡áááºáá»á¬ážá¡áá±á«áº á¡ááŒá±áá¶á áááºááá áºáá»á¬ážááᯠáááºááŸááºááŒááºážááŸáá·áº á¡ááºááááºáá¯ááºááẠááœáá·áºááŒá¯áááºá á€áááºááá áºáá»á¬ážááᯠLoki ááá¯á·áááá¯á·áá« - áááºážááá¯á·ááẠPromtail /metrics á¡áá¯á¶ážááŸááºááœáẠáá±á«áºáá¬áá«áááºá á€á¡ááá·áºááŸáá±áá¬ááá¯áááºáá¶áááŸáááẠPrometheus ááᯠconfigure áá¯ááºááá«áááºá á¡áááºáá±á¬áºááŒáá« á¥ááá¬ááœááºá request_type="api" á¡ááœáẠáá»áœááºá¯ááºááá¯á·ááẠhistogram áááºááá áºááᯠá á¯áá±á¬ááºážáá«áááºá á€áááºááá áºá¡áá»áá¯ážá¡á á¬ážáá»á¬ážááŒáá·áº áá¬ááá¯ááºáá°ááºážáá»á¬ážááᯠáááŸáááẠá¡áááºááŒá±áááºá áááºááŒáááºááŸá¯ááŸáá·áº áá¬ááºáá¯á¶áá»á¬ážá¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠáá»ááºážáá»áŸá¡á¬ážááœááºáá»ááºááẠááá¯ááºáá»á¬ážáááºáá¶áááŸáááá·áº á¡áááºážá¡áá±á¡ááœááºááŸáá·áº ááá¯ááºáá»á¬ážá áá±á«ááºážáááºáá»á¬ážááᯠá á¯áá±á¬ááºážáá«áááºá
áááºááá
áºáá»á¬ážá¡ááŒá±á¬ááºáž ááá¯ááá¯áááºáá«á
Promtail ááœáẠááááºáááºážáá áºáá¯ááœáá·áºáá«-
promtail:
image: grafana/promtail:1.4.1
container_name: monitoring.promtail
expose:
- 9080
ports:
- "9080:9080"
promtail_custom prefix áá«ááŸááá±á¬ áááºááá áºáá»á¬áž áá±á«áºáá¬ááŒá±á¬ááºáž áá±áá»á¬á á±áá«áááº-
Prometheus ááᯠáááºááŸááºááŒááºážá á¡áá¯ááºá¡áá±ážá¡áá°ááᯠááá·áºáá«-
- job_name: 'promtail'
scrape_interval: 10s
static_configs:
- targets: ['promtail:9080']
ááááºáá áºáá¯ááœá²áá«á
á€áááºážá¡á¬ážááŒáá·áº á¥ááá¬á¡á¬ážááŒáá·áº á¡ááŸá±ážáá¯á¶ážáá±á¬ááºážááá¯ááŸá¯áá±ážáá¯ááᯠáááºááŸá¬ááœá±ááá¯ááºáááºá á€áááºááá áºáá»á¬ážá¡ááœáẠá á±á¬áá·áºááŒáá·áºá á áºáá±ážááŒááºážááᯠáááºáááºáž á á®á ááºáááºááŸááºááá¯ááºáááºá
á¡ááá¯ááºážá¡áá¬
Loki ááẠsingle binary mode ááŸáá·áº sharded (á¡áá»á¬ážááá¯ááº-scalable mode) ááŸá áºáá»áá¯ážáá¯á¶ážááœááºááŸáááá¯ááºáááºá áá¯áááááá á¹á ááœááºá áááºážááẠáá±áá¬áá»á¬ážááᯠcloud ááœááºááááºážáááºážááá¯ááºááŒá®áž á¡ááá¯ááºážáá»á¬ážááŸáá·áº á¡ááœáŸááºážáá»á¬ážááᯠáá®ážááŒá¬ážááááºážáááºážáá¬ážáááºá áá¬ážááŸááºáž 1.5 ááœáẠáá áºáá±áá¬áááºážááœáẠááááºážáááºážááá¯ááºááŸá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá¬ážáá±á¬áºáááºáž áááºážááᯠáá¯ááºáá¯ááºáá¬ááœáẠá¡áá¯á¶ážááŒá¯ááẠá¡ááŒá¶ááŒá¯áá¬ážááŒááºážáááŸááá±ážáá±á
á¡ááá¯ááºážáá»á¬ážááᯠS3-áááá¬áááŸááá±á¬ ááá¯ááŸá±á¬ááºááŸá¯ááœáẠááááºážáááºážááá¯ááºáááºá á¡ááœáŸááºážááááºážáá»á¬áž ááááºážáááºážáááºá¡ááœááºá á¡áá»á¬ážááá¯áẠá¡ááá¯ááºážá¡áá¬ááŒáá·áº áá¯ááºááá¯ááºáá±á¬ áá±áá¬áá±á·á áºáá»á¬áž- Cassandraá BigTable ááá¯á·ááá¯áẠDynamoDB ááᯠá¡áá¯á¶ážááŒá¯áá«á Loki áá¡ááŒá¬ážá¡á áááºá¡ááá¯ááºážáá»á¬áž - ááŒáá·áºáá±áá°áá»á¬áž (á á¬áá±ážáááºá¡ááœááº) ááŸáá·áº Querier (áá±ážááŒááºážáá»ááºáá»á¬ážá¡ááœááº) - ááá¯ááºáá¶áá²á·ááŒá áºááŒá®áž á¡áá»á¬ážááá¯ááºá¡ááá¯ááºáž á¡ááá¯ááºážá¡áá¬áá»á¬ážááŒá áºáááºá
DevOpsDays Vancouver 2019 ááœááºáááá·áºááœáẠáá«áááºáá° Callum Styan á០Loki ááẠáááºážáááá±á¬áá»ááºááœáẠá
á¯á
á¯áá±á«ááºážá¡ááœááºá¡á
á¬ážá 1% áááºáááºážáá±á¬ á¡ááœáŸááºážááááºáž petabytes ááŸáááŒá±á¬ááºáž ááŒá±ááŒá¬áá²á·áááº- "
Loki ááŸáá·áº ELK ááŸáá¯ááºážááŸááº
á¡ááœáŸááºážá¡ááœááºá¡á á¬áž
ááááºá¡ááœáŸááºážá¡ááœááºá¡á á¬ážááᯠá ááºážáááºáááºá á¡ááẠPipeline ááᯠááŒááºáááºáááºááŸááºáá¬ážááá·áº nginx ááœááºááááºáá¬á០ááŸááºáááºážáá»á¬ážááᯠáá»áœááºá¯ááºáá°áá²á·áááºá ááŸááºáááºážááá¯ááºááœáẠá á¯á á¯áá±á«ááºážááá¬á 406 MB ááŸááá±á¬ á á¬ááŒá±á¬ááºáž 624 áá«ááŸááááºá ááŸááºáááºážáá»á¬ážááᯠáá áºáá¬áá®á¡ááœááºáž áá¯ááºáá±ážááá¯ááºááŒá®áž áá áºá áá¹ááá·áºáá»áŸáẠá á¶áá»ááẠááá ááá·áºááŸááááºá
ááŸááºáááºážá០á á¬ááŒá±á¬ááºážááŸá áºááŒá±á¬ááºážá á¥ááá¬áá áºáá¯á
ELK ááŒáá·áº á¡ááœáŸááºážáá±ážáá±á¬á¡áá«á áááºážááẠá¡ááœáŸááºážá¡ááœááºá¡á á¬áž 30,3 MB ááá¯áá±ážáááº-
Loki ááá á¹á ááœááºá áááºážááẠá¡ááœáŸááºážááááºáž 128 KB ááá·áºááŸáá·áº áá±áᬠ3,8 MB ááá·áºááᯠá¡ááá¯ááºážááá¯ááºáá±ážáááºá ááŸááºáááºážááẠá¡áá¯á¡áá±á¬áẠáááºáá®ážáá¬ážááŒá®áž áá±áᬠá¡áá»á¬ážá¡ááŒá¬áž ááá«áááºááŒá±á¬ááºáž áááááŒá¯ááá·áºáááºá áá±áá¬áá«ááŸááá±á¬ áá°áááºáž Docker JSON ááŸááºáááºážááŸá ááá¯ážááŸááºážáá±á¬ gzip ááẠ95,4% ááᯠáá»á¯á¶á·áá±ážáᬠááá·áºá ááºáá¬ážáá±á¬ nginx ááŸááºáááºážááá¯áᬠLoki ááá¯ááºááá¯ááºáá¶ááá¯á· áá±ážááá¯á·áá¬ážáá±á¬ááŒá±á¬áá·áº áá»á¯á¶á·ááŸá¯ááᯠ4 MB á¡áá áá¬ážáááºááá¯ááºáá«áááºá Loki á¡ááœáŸááºážáá»á¬ážá¡ááœáẠáá áºáá°áá°ážááŒá¬ážáá±á¬ áááºááá¯ážáá»á¬áž á á¯á á¯áá±á«ááºáž 35 ááŒá áºáááºá áááºážááẠá¡ááœáŸááºážá áá±ážáááºáá±á¬ á¡ááœááºá¡á á¬ážááᯠááŸááºážááŒáááºá ELK á¡ááœááºá ááŸááºáááºážááá¯áááºáž ááŸááºážáááºážáá¬ážáááºá ááá¯á·ááŒá±á¬áá·áº Loki ááẠáá°áááºážáá±áá¬ááᯠ96% ááŸáá·áº ELK 70% ááŒáá·áº áá»á¯á¶á·áá²á·áááºá
ááŸááºáá¬ááºáá¯á¶ážá áœá²ááŸá¯
Prometheus ááŸáá·áº ELK á¡á á¯á¡áá±ážáá áºáá¯áá¯á¶ážááᯠááŸáá¯ááºážááŸááºáá«á Loki ááẠá¡ááá»á¬ážá áœá¬ "á á¬ážáááº" ááŒá áºáááºá Go áááºáá±á¬ááºááŸá¯ááẠJava áááºáá±á¬ááºááŸá¯áááºáááºážááŒá®áž Heap Elasticsearch JVM áá¡ááœááºá¡á á¬ážááŸáá·áº Loki á¡ááœáẠááœá²áá±áá»áá¬ážáá±ážááá·áºááŸááºáá¬ááºááᯠááŸáá¯ááºážááŸááºááŒááºážááẠááŸá¬ážááœááºážáá±áá±á¬áºáááºáž Loki ááẠááŸááºáá¬ááºááá¯áááºážáááºááᯠáááááŒá¯ááá·áºáááºá áá°á·áá²á· CPU á¡á¬ážáá¬áá»ááºá ááááºááááá¬áá±ááá·áºáááºáž ááŸááá±áááºá
á¡ááŸáááº
Loki ááẠ"ááá¯ááºá á¬ážáááº" ááŸááºáááºážááᯠááá¯ááŒááºá á±áááºá ááŒááºááŸá¯ááºážááẠá¡ááŒá±á¬ááºážáááºážáá»á¬ážá áœá¬áá±á«áºááœáẠáá°áááºááẠ- áááºááá¯á·áá±á¬ ááŸááºáááºážáá»á¬ážá áááºážááá¯á·ááᯠááœá²ááŒááºážá áááºááŒá¬áá¯á¶á ááœááºáááºá áá áºáẠá¡á ááŸááááºááá¯á·á¡áá±á«áº áá°áááºááẠ- ááá¯á·áá±á¬áº áááºážááẠELK (áá»áœááºá¯ááºá á ááºážáááºááŸá¯ááœáẠ- ááŸá áºáááá·áº) ááẠááá¯ááá¯ááŒáá·áºáá¬ážáá«áááºá Loki ááẠá¡ááœáŸááºážááááºážááœáẠáá±áá¬áá»á¬ážá áœá¬ááᯠáááºážáá«ážá áœá¬ ááá·áºáá¬ážáá±á¬ááŒá±á¬áá·áº áááºážááᯠááœáŸááºážááááºážááŒá¯áá¯ááºáá¬ááœáẠá¡áá»áááºááá¯áááºážáá±á¬ááŒá±á¬áá·áº ááŸááºážááŒáááºá á€ááá á¹á ááœááºá á¡ááŒá±á¡áá±ááẠááŸá¬ááœá±ááŸá¯á¡ááŒááºááŸá¯ááºážááŒáá·áº ááŒá±á¬ááºážááŒááºááŒá áºáááº- Loki ááẠáá áºáá«ááá¯ááºá¡áááºážáááºáááºááŒá®ážáá±á¬ áá±áá¬áá»á¬ážááᯠáááááá¬áá¬ááŸá±ážááœá±ážá á±ááŒá®áž ELK á¡ááœáẠááŸá¬ááœá±ááŸá¯ááŒááºááŸá¯ááºážááẠáá±áá¬á¡ááœááºá¡á á¬ážáá±á«áºááœááºáá°áááºááŒááºážáááŸááá±á
ááŸááºáááºážááŸá¬ááœá±ááŸá¯
Loki ááẠááŸááºáááºážááŸá¬ááœá±ááŸá¯á áœááºážáááºá¡á ELK ááẠáááááá¬áᬠáááá·áºáá»áááºá áá¯á¶ááŸááºá¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬ážááŒáá·áº Grep ááẠá¡á¬ážáá±á¬ááºážáá±á¬áºáááºáž áááºážááẠá¡ááœááºáá±á¬ááºááŒá®ážáá°áá±áá¬áá±á·á áºááẠáá¯ááºáá¶á·áááºá á¡ááœá¬á¡áá±áž áá±ážááŒááºážáá»ááºáááŸáááŒááºážá á¡ááœáŸááºážáá»á¬ážááŒáá·áºáᬠá á¯á ááºážáá¬ážááŒááºážá á¡ááœáŸááºážááá«áá² ááŸá¬ááœá±ááá¯ááºááŒááºáž áááŸáááŒááºáž - á€á¡áá¬á¡á¬ážáá¯á¶ážááẠLoki á á áááºáááºá á¬ážááœááºá¡áá»ááºá¡áááºáá»á¬ážááᯠááŸá¬ááœá±áá¬ááœáẠáá»áœááºá¯ááºááá¯á·ááᯠááá·áºáááºáá¬ážáááºá Loki ááᯠá¡áá¯á¶ážááŒá¯á áááºááá·áºá¡áá¬ááá¯áá»áŸ ááŸá¬áááœá±á·áᯠááá¯ááá¯ááŒááºážááá¯ááºáá±á¬áºáááºáž Prometheus ááá¬ážáá»á¬ážááœáẠááŒá¿áá¬áá áºáá¯ááᯠáááºááááá¯á¶ážááœá±á·ááŸááá±á¬á¡áá«ááœáẠáááºážááẠááŸááºáááºážáá»á¬ážááŸáá·áº á¡áá¯ááºáá¯ááºáá¯á¶ááᯠá¡áááá¹áá«ááºááœáá·áºááá¯áᬠá€áá¶ááááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á ááŸááºáááºážáá»á¬ážááœáẠááŒá áºáá»ááºáá²á·áááºáá»á¬ážááᯠááŸá¬ááœá±áá«á
interface ááá¯
ááááá±á¬á· ááŸááẠ(áá±á¬ááºážáááºáá«áááºá áááºážááá¶ááá¯ááºáá°áž)á Grafana ááẠááŸááá±á¬á¡ááœááºá¡ááŒááºááŸááá±á¬áºáááºáž Kibana ááẠááá¯áá¡áá¯ááºáá¯ááºáááºá
Loki á á¡á¬ážáá¬áá»ááºáá»á¬ážááŸáá·áº á¡á¬ážáááºážáá»ááºáá»á¬áž
á¡á¬ážáá¬áá»ááºáá»á¬ážáá²á០Loki ááẠPrometheus ááŸáá·áº á¡áá®ážáá®áž áá±á«ááºážá ááºáá¬ážááŒá®ážá áá»áœááºá¯ááºááá¯á·ááẠáááºááá áºáá»á¬ážááᯠáááŸáááŒá®áž ááááá±ážáá»ááºáá»á¬ážááᯠááœááºáááºá០áááŸáááŒá±á¬ááºáž ááŸááºáá¬ážááá¯ááºáá«áááºá Prometheus á០á¡ááœá±áááºáá¶áá±á¬ áááºáá±á¬ááºááŸá¯ááᯠááŸá¬ááœá±ááœá±á·ááŸáááŒá®áž á¡ááœáŸááºážáá»á¬ážááᯠá¡ááá¯á¡áá»á±á¬áẠáá°ážááœá²áá±ážáá±á¬ááŒá±á¬áá·áº ááŸááºáááºážáá»á¬ážááᯠá á¯áá±á¬ááºážáᬠKubernetes Pods ááŒáá·áº ááááºážáááºážááŒááºážá¡ááœáẠáááºážááẠá¡áááºááŒá±áá«áááºá
minuses áá»á¬ážá - á á¬ááœááºá á¬áááºážáá¶á·áá»ááºážá Promtail á á¡ááºá¹áá«áááºáá»á¬ážááŸáá·áº áá¯ááºáá±á¬ááºááá¯ááºá áœááºážáá»á¬ážáá²á·ááá¯á·áá±á¬ á¡áá»áá¯á·á¡áá¬áá»á¬ážááẠáá¯ááºááá¯áá±á·áá¬ááŒááºážáá¯ááºáááºážá ááºááœááºáᬠááŸá¬ááœá±ááœá±á·ááŸááá²á·ááŒá®áž open-source á á¡áá»áá¯ážáá»á±ážáá°ážáá»á¬ážá áá±á¬ááºáááºá¡á¬ážáááºážáá»ááºááá±á¬á· ááœá²ááŒááºážá áááºááŒá¬ááá¯ááºááŸá¯ á¡á¬ážáááºážááŒááºážáá«áá²á á¥ááá¬á¡á¬ážááŒáá·áºá Loki ááẠmultiline ááŸááºáááºážáá»á¬ážááᯠááœá²ááŒááºážá áááºááŒá¬ááááá«á ááá¯á·á¡ááŒááºá á¡á¬ážáááºážáá»ááºáá»á¬ážááœáẠLoki ááẠáááºááœááºáá±á¬áááºážááá¬ááŒá áºááẠ(ááŒáá·áºáá»ááá±áž 1.0 ááẠ2019 áá¯ááŸá Ạááá¯áááºáá¬áááœááºááŒá áºáááº) áá«áááºáááºá
áá±á¬ááºáá»ááº
Loki ááẠááŸááºáááºážáá±á«ááºážá ááºážááŒááºážá ááŸááºáááºážááŸá¬ááœá±ááŒááºážá á á±á¬áá·áºááŒáá·áºááŒááºážááŸáá·áº ááœá²ááŒááºážá áááºááŒá¬ááŒááºážááá¯ááºáᬠááŒá¿áá¬áá»á¬ážá áœá¬ááᯠááŒá±ááŸááºážááá¯ááºá á±ááá·áº á¡áá±ážá á¬ážááŸáá·áº á¡áááºá á¬ážááá±á¬áá»ááºáá»á¬ážá¡ááœáẠááá·áºáá»á±á¬áºááá·áº 100% á áááºáááºá á¬ážááœááºáááºážááá¬áá áºáá¯ááŒá áºáááºá
Badoo ááŸá¬ Loki ááᯠááá¯á¶ážáá«áá°ážá áá¬ááŒá±á¬áá·áºáá²ááá¯áá±á¬á· áá»áœááºáá±á¬áºááá¯á·ááŸá¬ áá»áœááºáá±á¬áºááá¯á·áá²á· ááá¯ááºáá®áá²á· ELK stack áá áºáá¯ááŸáááŒá®áž ááŸá áºááœá±ááŒá¬áá¬áá¬áá²á·á¡áá»áŸ á áááºááŒáá¯ááºááŒá±ááŸááºážáá»ááºá¡áá»áá¯ážáá»áá¯ážáá²á· ááŒá®ážááœá¬ážáá¬áá¬ááŒá±á¬áá·áºáá«á áá»áœááºá¯ááºááá¯á·á¡ááœááºá ááááááá²á áá¬ááŸá¬ ááŸááºáááºážáá»á¬ážááœáẠááŸá¬ááœá±ááŒááºážáááºááŒá áºáááºá áá áºáá±á·áá»áŸáẠááŸááºáááºáž 100 GB áá®ážáá«ážááŒáá·áºá á¡áá¬á¡á¬ážáá¯á¶ážááᯠááŸá¬ááœá±ááá¯ááºááŒá®áž á¡áááºážáááºááá¯á áá»ááºááŒááºá áœá¬ áá¯ááºáá±á¬ááºááẠáá»áœááºá¯ááºááá¯á·á¡ááœáẠá¡áá±ážááŒá®ážáá«áááºá ááá¬ážááœááºááŸáá·áº á á±á¬áá·áºááŒáá·áºááŒááºážá¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·áááá¯á¡ááºáá»ááºáá»á¬ážááŸáá·áº á¡á¶áááºááœááºáá»ááŒá áºááŒá®áž áá áºáá¯ááŸáá·áºáá áºáᯠáá±á«ááºážá ááºáá¬ážááá·áº á¡ááŒá¬ážááŒá±ááŸááºážáááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá«áááºá Loki á¡á á¯á¡áá±ážááœáẠááŒááºáá¬áááºáá¬áá±á¬á¡áá»áá¯ážáá¶á á¬ážááœáá·áºáá»á¬ážááŸááááºá ááá¯á·áá±á¬áº áááºážááẠáá»áœááºá¯ááºááá¯á·áááŸááááºááẠááá¯áá±ážáááºááá¯ááºáá«á áááºážáá¡áá»áá¯ážáá¶á á¬ážááœáá·áºáá»á¬ážááẠááœáŸá±á·ááŒá±á¬ááºážááŒááºážáá¯ááºáá»á ááááºááá¯á¡ááá¡áá»áááºáá»á±á¬áºááœááºáááºááá¯ááºáá«á
áá¯áá±ááááŒá¯ááŒá®ážáá±á¬áẠLoki ááá¯áá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážáááŒá¯ááá¯ááºááŒá±á¬ááºážááŸááºážááŸááºážáááºážáááºážááŒá áºáá¬áá±á¬áºáááºážá á€ááá¯á·á áºáááºááá·áºá¡á¬ážááœá±ážáá»ááºáá¬ááœááºáá°áá®áááá·áºáááºáá¯áá»áŸá±á¬áºááá·áºáá«áááºá
áá±á¬ááºážáá«ážááœáẠá¡áá¯á¶ážááŒá¯ááá·áº áá¯ááºáá«áá±á¬ ááá¯ááŸá±á¬ááºáááºážááẠáááºááŸááá«áááºá
source: www.habr.com