å°å ¥
å¥ã®ã·ã¹ãã ãå°å ¥ããéãå€æ°ã®ç°ãªããã°ãåŠçããå¿ èŠæ§ã«çŽé¢ããŸããã ELK ãããŒã«ãšããŠéžæãããŸããã ãã®èšäºã§ã¯ããã®ã¹ã¿ãã¯ã®ã»ããã¢ããã«é¢ããç§ãã¡ã®çµéšã«ã€ããŠèª¬æããŸãã
ãã¹ãŠã®æ©èœã説æãããšããç®æšã¯èšå®ããŸããããç¹ã«å®éçãªåé¡ã®è§£æ±ºã«éäžããããšèããŠããŸãã ããã¯ãããªã倧éã®ããã¥ã¡ã³ããšæ¢è£œã®ã€ã¡ãŒãžãããã«ãããããããå°ãªããšãç§ãã¡ãèŠã€ããèœãšãç©Žãããªããããããããšããäºå®ã«ãããã®ã§ãã
docker-compose ãä»ããŠã¹ã¿ãã¯ããããã€ããŸããã ããã«ãããæžããã docker-compose.yml ããã£ããããã»ãŒåé¡ãªãã¹ã¿ãã¯ãåŒãäžããããšãã§ããŸããã ãããŠãç§ãã¡ã«ã¯ãã§ã«åå©ãè¿ã¥ããŠããããã«èŠããŸãããä»åºŠã¯ç§ãã¡ã®ããŒãºã«åãããŠå°ã調æŽããŠãããã§çµããã§ãã
æ®å¿µãªãããã¢ããªã±ãŒã·ã§ã³ãããã°ãåä¿¡ããŠââåŠçããããã«ã·ã¹ãã ãæ§æããè©Šã¿ã¯ãããã«ã¯æåããŸããã§ããã ãããã£ãŠãåã³ã³ããŒãã³ããåå¥ã«æ€èšããŠããããããã®æ¥ç¶ã«æ»ãããšã䟡å€ããããšå€æããŸããã
ããã§ãlogstash ããå§ããŸããã
ç°å¢ããããã€ã¡ã³ããã³ã³ãããŒå ã§ã® Logstash ã®å®è¡
ãããã€ã«ã¯ docker-compose ã䜿çšããŸããããã§èª¬æããå®éšã¯ MacOS ãš Ubuntu 18.0.4 ã§å®è¡ãããŸããã
ãªãªãžãã«ã® docker-compose.yml ã«ç»é²ããã logstash ã€ã¡ãŒãžã¯ docker.elastic.co/logstash/logstash:6.3.2 ã§ãã
å®éšã«äœ¿çšãããŠããã ããŸãã
logstash ãå®è¡ããããã«å¥ã® docker-compose.yml ãäœæããŸããã ãã¡ãããã³ãã³ãã©ã€ã³ããã€ã¡ãŒãžãèµ·åããããšãå¯èœã§ããããç§ãã¡ã¯ docker-compose ãããã¹ãŠãå®è¡ãããšããç¹å®ã®åé¡ã解決ããŠããŸããã
èšå®ãã¡ã€ã«ã«ã€ããŠç°¡åã«èª¬æããŸã
説æããåããããã«ãlogstash 㯠XNUMX ã€ã®ãã£ãã«ã«å¯ŸããŠå®è¡ã§ããŸã (ãã®å Žå㯠*.conf ãã¡ã€ã«ãæž¡ãå¿
èŠããããŸã)ããŸãã¯è€æ°ã®ãã£ãã«ã«å¯ŸããŠå®è¡ã§ããŸã (ãã®å Žå㯠Pipelines.yml ãã¡ã€ã«ãæž¡ãå¿
èŠããããŸã)ã ãåãã£ã³ãã«ã®ãã¡ã€ã« .conf ã«ãªã³ã¯ããŸãã
ç§ãã¡ã¯XNUMXçªç®ã®éãéžã³ãŸããã ç§ãã¡ã«ã¯ããããããæ®éçã§æ¡åŒµæ§ãããããã«èŠããŸããã ããã§ãpipelines.yml ãäœæããåãã£ãã«ã® .conf ãã¡ã€ã«ãé
眮ãã Pipelines ãã£ã¬ã¯ããªãäœæããŸããã
ã³ã³ãããŒå ã«ã¯ãå¥ã®æ§æãã¡ã€ã« logstash.yml ããããŸãã ãã¡ã¯è§Šããã«ãã®ãŸãŸäœ¿ã£ãŠãŸãã
ãããã£ãŠããã£ã¬ã¯ããªæ§é ã¯æ¬¡ã®ããã«ãªããŸãã
å
¥åããŒã¿ãåä¿¡ããã«ã¯ãä»ã®ãšããããŒã 5046 äžã® TCP ã§ãããšæ³å®ããåºåã«ã¯ stdout ã䜿çšããŸãã
ããã§ã¯ãååèµ·åæã®ç°¡åãªæ§æã瀺ããŸãã ãªããªããæåã®ã¿ã¹ã¯ã¯èµ·åããããšã ããã§ãã
ããã docker-compose.yml ã§ãã
version: '3'
networks:
elk:
volumes:
elasticsearch:
driver: local
services:
logstash:
container_name: logstash_one_channel
image: docker.elastic.co/logstash/logstash:6.3.2
networks:
- elk
ports:
- 5046:5046
volumes:
- ./config/pipelines.yml:/usr/share/logstash/config/pipelines.yml:ro
- ./config/pipelines:/usr/share/logstash/config/pipelines:ro
ããã§äœãèŠããŸããïŒ
- ãããã¯ãŒã¯ãšããªã¥ãŒã ã¯å ã® docker-compose.yml (ã¹ã¿ãã¯å šäœãèµ·åããããã®) ããååŸãããŠãããããã§ã®å šäœåã«å€§ããªåœ±é¿ãäžãããã®ã§ã¯ãªããšæããŸãã
- docker.elastic.co/logstash/logstash:6.3.2 ã€ã¡ãŒãžãã XNUMX ã€ã® logstash ãµãŒãã¹ãäœæããlogstash_one_channel ãšããååãä»ããŸãã
- ã³ã³ããå ã®ããŒã 5046 ãåãå éšããŒãã«è»¢éããŸãã
- ãã€ãèšå®ãã¡ã€ã« ./config/pipelines.yml ãã³ã³ããå ã®ãã¡ã€ã« /usr/share/logstash/config/pipelines.yml ã«ãããããŸããããã§ãlogstash ããããååŸãã念ã®ããèªã¿åãå°çšã«ããŸãã
- ãã£ãã«èšå®ãå«ããã¡ã€ã«ããã ./config/pipelines ãã£ã¬ã¯ããªã /usr/share/logstash/config/pipelines ãã£ã¬ã¯ããªã«ãããããèªã¿åãå°çšã«ããŸãã
Pipelines.yml ãã¡ã€ã«
- pipeline.id: HABR
pipeline.workers: 1
pipeline.batch.size: 1
path.config: "./config/pipelines/habr_pipeline.conf"
ããã§ã¯ãHABR èå¥åãæ〠XNUMX ã€ã®ãã£ãã«ãšãã®æ§æãã¡ã€ã«ãžã®ãã¹ã«ã€ããŠèª¬æããŸãã
ãããŠæåŸã«ãã¡ã€ã«ã./config/pipelines/habr_pipeline.confã
input {
tcp {
port => "5046"
}
}
filter {
mutate {
add_field => [ "habra_field", "Hello Habr" ]
}
}
output {
stdout {
}
}
ä»ã¯ãã®èª¬æã«ã¯ç«ã¡å ¥ããªãã§ãå®è¡ããŠã¿ãŸãããã
docker-compose up
äœãèŠããŸããïŒ
ã³ã³ãããèµ·åããŸããã ãã®åäœã確èªã§ããŸãã
echo '13123123123123123123123213123213' | nc localhost 5046
ãããŠãã³ã³ãããŒã³ã³ãœãŒã«ã«å¿çã衚瀺ãããŸãã
ãããåæã«ã次ã®ããšãããããŸãã
ãã°ã¹ã¿ãã·ã¥ã¯ã³ãã£ã³ãã« | [2019-04-29T11:28:59,790][ãšã©ãŒ][logstash.licensechecker.licensereader] ã©ã€ã»ã³ã¹ ãµãŒããŒããã©ã€ã»ã³ã¹æ å ±ãååŸã§ããŸãã {:message=>ãElasticsearch ã«å°éã§ããŸãã: [http://elasticsearch:9200/][Manticore]ã ::ResolutionFailure] elasticsearch", ...
ãã°ã¹ã¿ãã·ã¥ã¯ã³ãã£ã³ãã« | [2019-04-29T11:28:59,894][æ å ±][logstash.pipeline ] ãã€ãã©ã€ã³ãæ£åžžã«éå§ãããŸãã {:pipeline_id=>".monitoring-logstash", :thread=>"# "}
ãã°ã¹ã¿ãã·ã¥ã¯ã³ãã£ã³ãã« | [2019-04-29T11:28:59,988][æ
å ±][logstash.agent ] ãã€ãã©ã€ã³ãå®è¡äžã§ã {:count=>2, :running_pipelines=>[:HABR, :".monitoring-logstash"], :non_running_pipelines=>[ ]}
ãã°ã¹ã¿ãã·ã¥ã¯ã³ãã£ã³ãã« | [2019-04-29T11:29:00,015][ãšã©ãŒ][logstash.inputs.metrics] X-Pack 㯠Logstash ã«ã€ã³ã¹ããŒã«ãããŠããŸãããElasticsearch ã«ã¯ã€ã³ã¹ããŒã«ãããŠããŸããã ã¢ãã¿ãªã³ã°æ©èœã䜿çšããã«ã¯ãElasticsearch ã« X-Pack ãã€ã³ã¹ããŒã«ããŠãã ããã ä»ã®æ©èœãå©çšã§ããå ŽåããããŸãã
ãã°ã¹ã¿ãã·ã¥ã¯ã³ãã£ã³ãã« | [2019-04-29T11:29:00,526][æ
å ±][logstash.agent ] Logstash API ãšã³ããã€ã³ã {:port=>9600} ãæ£åžžã«éå§ãããŸãã
ãã°ã¹ã¿ãã·ã¥ã¯ã³ãã£ã³ãã« | [2019-04-29T11:29:04,478][æ
å ±][logstash.outputs.elasticsearch] ãã«ã¹ãã§ãã¯ãå®è¡ã㊠Elasticsearch æ¥ç¶ãæ©èœããŠãããã©ããã確èªããŸã {:healthcheck_url=>http://elasticsearch:9200/, :path=> "/"}
ãã°ã¹ã¿ãã·ã¥ã¯ã³ãã£ã³ãã« | [2019-04-29T11:29:04,487][èŠå][logstash.outputs.elasticsearch] åæ¢ãã ES ã€ã³ã¹ã¿ã³ã¹ãžã®æ¥ç¶ã埩掻ãããããšããŸãããããšã©ãŒãçºçããŸããã {:url=>â
ãã°ã¹ã¿ãã·ã¥ã¯ã³ãã£ã³ãã« | [2019-04-29T11:29:04,704][æ
å ±][logstash.licensechecker.licensereader] ãã«ã¹ãã§ãã¯ãå®è¡ã㊠Elasticsearch æ¥ç¶ãæ©èœããŠãããã©ããã確èªããŸã {:healthcheck_url=>http://elasticsearch:9200/, :path=> "/"}
ãã°ã¹ã¿ãã·ã¥ã¯ã³ãã£ã³ãã« | [2019-04-29T11:29:04,710][èŠå][logstash.licensechecker.licensereader] åæ¢ãã ES ã€ã³ã¹ã¿ã³ã¹ãžã®æ¥ç¶ã埩掻ãããããšããŸãããããšã©ãŒãçºçããŸããã {:url=>â
ãããŠç§ãã¡ã®ãã°ã¯åžžã«å¢å ããŠããŸãã
ããã§ã¯ããã€ãã©ã€ã³ãæ£åžžã«èµ·åããããšã瀺ãã¡ãã»ãŒãžãç·è²ã§åŒ·èª¿è¡šç€ºãããšã©ãŒ ã¡ãã»ãŒãžãèµ€è²ã§åŒ·èª¿è¡šç€ºããæ¥ç¶ã®è©Šè¡ã«é¢ããã¡ãã»ãŒãžãé»è²ã§åŒ·èª¿è¡šç€ºããŠããŸãã
ããã¯ãã€ã¡ãŒãžã«å«ãŸãã logstash.conf ã« elasticsearch ã®å¯çšæ§ã®ãã§ãã¯ãå«ãŸããŠããããã«çºçããŸãã çµå±ã®ãšãããlogstash 㯠Elk ã¹ã¿ãã¯ã®äžéšãšããŠåäœããããšãåæãšããŠããŸããããããåé¢ããŸããã
åãããšã¯å¯èœã§ãããäžäŸ¿ã§ãã
解決çã¯ãXPACK_MONITORING_ENABLED ç°å¢å€æ°ã䜿çšããŠãã®ãã§ãã¯ãç¡å¹ã«ããããšã§ãã
docker-compose.yml ãå€æŽããŠãå床å®è¡ããŠã¿ãŸãããã
version: '3'
networks:
elk:
volumes:
elasticsearch:
driver: local
services:
logstash:
container_name: logstash_one_channel
image: docker.elastic.co/logstash/logstash:6.3.2
networks:
- elk
environment:
XPACK_MONITORING_ENABLED: "false"
ports:
- 5046:5046
volumes:
- ./config/pipelines.yml:/usr/share/logstash/config/pipelines.yml:ro
- ./config/pipelines:/usr/share/logstash/config/pipelines:ro
ããŠããã¹ãŠé 調ã§ãã ã³ã³ããã¯å®éšã®æºåãæŽããŸããã
次ã®ã³ã³ãœãŒã«ã«ããäžåºŠå ¥åããŸãã
echo '13123123123123123123123213123213' | nc localhost 5046
ãããŠã以äžãåç §ããŠãã ããã
logstash_one_channel | {
logstash_one_channel | "message" => "13123123123123123123123213123213",
logstash_one_channel | "@timestamp" => 2019-04-29T11:43:44.582Z,
logstash_one_channel | "@version" => "1",
logstash_one_channel | "habra_field" => "Hello Habr",
logstash_one_channel | "host" => "gateway",
logstash_one_channel | "port" => 49418
logstash_one_channel | }
XNUMX ã€ã®ãã£ãã«å ã§äœæ¥ãã
ããã§ç§ãã¡ã¯ç«ã¡äžããŸããã ããã§ãå®éã«æéããã㊠logstash èªäœãæ§æã§ããããã«ãªããŸãã ããã§ã¯ãpipelines.yml ãã¡ã€ã«ã«ã¯è§Šããã«ãXNUMX ã€ã®ãã£ãã«ãæäœããããšã§äœãåŸãããããèŠãŠã¿ãŸãããã
ãã£ãã«æ§æãã¡ã€ã«ã䜿çšããäžè¬ååã¯ãå
¬åŒããã¥ã¢ã«ã«è©³ãã説æãããŠãããšèšããããåŸãŸããã
ãã·ã¢èªã§èªã¿ããå Žåã¯ãããã䜿çšããŸãã
å ¥åã»ã¯ã·ã§ã³ããé ã«è¡ã£ãŠã¿ãŸãããã ç§ãã¡ã¯ãã§ã« TCP ã«é¢ããåãçµã¿ãèŠãŠããŸããã ä»ã«äœãé¢çœãã§ãããã?
ããŒãããŒãã䜿çšããŠã¡ãã»ãŒãžããã¹ããã
èªåãã¹ã ã¡ãã»ãŒãžãçæããéåžžã«èå³æ·±ãæ©äŒããããŸãã
ãããè¡ãã«ã¯ãå
¥åã»ã¯ã·ã§ã³ã§ããŒãããŒã³ ãã©ã°ã€ã³ãæå¹ã«ããå¿
èŠããããŸãã
input {
heartbeat {
message => "HeartBeat!"
}
}
é»æºãå ¥ããŠãXNUMXåã«XNUMXååä¿¡ãéå§ããŸã
logstash_one_channel | {
logstash_one_channel | "@timestamp" => 2019-04-29T13:52:04.567Z,
logstash_one_channel | "habra_field" => "Hello Habr",
logstash_one_channel | "message" => "HeartBeat!",
logstash_one_channel | "@version" => "1",
logstash_one_channel | "host" => "a0667e5c57ec"
logstash_one_channel | }
ãã£ãšé »ç¹ã«åä¿¡ãããå Žåã¯ãinterval ãã©ã¡ãŒã¿ãè¿œå ããå¿
èŠããããŸãã
ãã®ããã«ããŠã10 ç§ããšã«ã¡ãã»ãŒãžãåä¿¡ããŸãã
input {
heartbeat {
message => "HeartBeat!"
interval => 10
}
}
ãã¡ã€ã«ããããŒã¿ãååŸãã
ãã¡ã€ã«ã¢ãŒãã«ã€ããŠãæ€èšããããšã«ããŸããã ãã¡ã€ã«ãæ£åžžã«åäœããå Žåã¯ãå°ãªããšãããŒã«ã«ã§äœ¿çšããå Žåã«ã¯ãšãŒãžã§ã³ãã¯å¿ èŠãªãå¯èœæ§ããããŸãã
説æã«ãããšãåäœã¢ãŒã㯠tail -f ãšåæ§ã§ããå¿ èŠããããŸããã€ãŸãã æ°ããè¡ãèªã¿åããããªãã·ã§ã³ã§ãã¡ã€ã«å šäœãèªã¿åããŸãã
ããã§ãç§ãã¡ãååŸããããã®ã¯æ¬¡ã®ãšããã§ãã
- XNUMX ã€ã®ãã° ãã¡ã€ã«ã«è¿œå ãããè¡ãåä¿¡ããããšèããŠããŸãã
- è€æ°ã®ãã° ãã¡ã€ã«ã«æžã蟌ãŸããããŒã¿ããäœãã©ãããåä¿¡ããããåé¢ã§ããããã«åä¿¡ããããšèããŠããŸãã
- logstash ãåèµ·åããããšãã«ããã®ããŒã¿ãå床åä¿¡ããªãããã«ããããšèããŠããŸãã
- logstash ããªãã«ãªã£ãŠããŠãããŒã¿ãåŒãç¶ããã¡ã€ã«ã«æžã蟌ãŸããŠããå Žåãlogstash ãå®è¡ãããšãã®ããŒã¿ãåä¿¡ãããããšã確èªããããšèããŠããŸãã
å®éšãè¡ãããã«ãdocker-compose.yml ã«å¥ã®è¡ãè¿œå ããŠããã¡ã€ã«ã眮ãããã£ã¬ã¯ããªãéããŸãã
version: '3'
networks:
elk:
volumes:
elasticsearch:
driver: local
services:
logstash:
container_name: logstash_one_channel
image: docker.elastic.co/logstash/logstash:6.3.2
networks:
- elk
environment:
XPACK_MONITORING_ENABLED: "false"
ports:
- 5046:5046
volumes:
- ./config/pipelines.yml:/usr/share/logstash/config/pipelines.yml:ro
- ./config/pipelines:/usr/share/logstash/config/pipelines:ro
- ./logs:/usr/share/logstash/input
ãããŠãhabr_pipeline.conf ã®å ¥åã»ã¯ã·ã§ã³ãå€æŽããŸãã
input {
file {
path => "/usr/share/logstash/input/*.log"
}
}
ã¯ãããŸãããïŒ
docker-compose up
ãã° ãã¡ã€ã«ãäœæããŠæžã蟌ãã«ã¯ã次ã®ã³ãã³ãã䜿çšããŸãã
âšecho '1' >> logs/number1.log
{
logstash_one_channel | "host" => "ac2d4e3ef70f",
logstash_one_channel | "habra_field" => "Hello Habr",
logstash_one_channel | "@timestamp" => 2019-04-29T14:28:53.876Z,
logstash_one_channel | "@version" => "1",
logstash_one_channel | "message" => "1",
logstash_one_channel | "path" => "/usr/share/logstash/input/number1.log"
logstash_one_channel | }
ã¯ããããŸããããŸãïŒ
åæã«ããã¹ãã£ãŒã«ããèªåçã«è¿œå ãããããšãããããŸãã ããã¯ãå°æ¥çã«ã¯ãããã«ãã£ãŠã¬ã³ãŒãããã£ã«ã¿ãŒã§ããããã«ãªãããšãæå³ããŸãã
ããäžåºŠè©ŠããŠã¿ãŸããã:
echo '2' >> logs/number1.log
{
logstash_one_channel | "host" => "ac2d4e3ef70f",
logstash_one_channel | "habra_field" => "Hello Habr",
logstash_one_channel | "@timestamp" => 2019-04-29T14:28:59.906Z,
logstash_one_channel | "@version" => "1",
logstash_one_channel | "message" => "2",
logstash_one_channel | "path" => "/usr/share/logstash/input/number1.log"
logstash_one_channel | }
次ã«ãå¥ã®ãã¡ã€ã«ã«ç§»åããŸãã
echo '1' >> logs/number2.log
{
logstash_one_channel | "host" => "ac2d4e3ef70f",
logstash_one_channel | "habra_field" => "Hello Habr",
logstash_one_channel | "@timestamp" => 2019-04-29T14:29:26.061Z,
logstash_one_channel | "@version" => "1",
logstash_one_channel | "message" => "1",
logstash_one_channel | "path" => "/usr/share/logstash/input/number2.log"
logstash_one_channel | }
çŽ æŽãããïŒ ãã¡ã€ã«ãéžæããããã¹ãæ£ããæå®ãããŠããããã¹ãŠåé¡ãããŸããã
logstash ãåæ¢ããŠãå床éå§ããŸãã åŸ ãšãã æ²é»ã ãããã®ã ãããã®èšé²ãå床åãåãããšã¯ãããŸããã
ãããŠä»åºŠã¯æã倧èãªå®éšã§ãã
logstash ãã€ã³ã¹ããŒã«ããŠå®è¡ããŸãã
echo '3' >> logs/number2.log
echo '4' >> logs/number1.log
logstash ãå床å®è¡ããŠã次ã確èªããŸãã
logstash_one_channel | {
logstash_one_channel | "host" => "ac2d4e3ef70f",
logstash_one_channel | "habra_field" => "Hello Habr",
logstash_one_channel | "message" => "3",
logstash_one_channel | "@version" => "1",
logstash_one_channel | "path" => "/usr/share/logstash/input/number2.log",
logstash_one_channel | "@timestamp" => 2019-04-29T14:48:50.589Z
logstash_one_channel | }
logstash_one_channel | {
logstash_one_channel | "host" => "ac2d4e3ef70f",
logstash_one_channel | "habra_field" => "Hello Habr",
logstash_one_channel | "message" => "4",
logstash_one_channel | "@version" => "1",
logstash_one_channel | "path" => "/usr/share/logstash/input/number1.log",
logstash_one_channel | "@timestamp" => 2019-04-29T14:48:50.856Z
logstash_one_channel | }
äžæ³ïŒ ãã¹ãŠãæŸãããŸããã
ãããã次ã®ç¹ã«ã€ããŠèŠåããªããã°ãªããŸããã logstash ã³ã³ãããŒãåé€ãããå Žå (docker stop logstash_one_channel && docker rm logstash_one_channel)ãäœãååŸãããŸããã ãã¡ã€ã«ãèªã¿åãããäœçœ®ã¯ã³ã³ããå ã«ä¿åãããŸãã æåããå®è¡ããå Žåã¯ãæ°ããè¡ã®ã¿ãåãå ¥ããŸãã
æ¢åã®ãã¡ã€ã«ã®èªã¿åã
åã㊠logstash ãèµ·åãããããã§ã«ãã°ããããããããåŠçããããšããŸãã
äžèšã§äœ¿çšããå
¥åã»ã¯ã·ã§ã³ã䜿çšã㊠logstash ãå®è¡ããŠããäœãååŸãããŸããã logstash ã§ã¯æ°ããè¡ã®ã¿ãåŠçãããŸãã
æ¢åã®ãã¡ã€ã«ããè¡ãååŸããã«ã¯ãå ¥åã»ã¯ã·ã§ã³ã«è¿œå ã®è¡ãè¿œå ããå¿ èŠããããŸãã
input {
file {
start_position => "beginning"
path => "/usr/share/logstash/input/*.log"
}
}
ããã«ã埮åŠãªéãããããŸããããã¯ãlogstash ããŸã èªèããŠããªãæ°ãããã¡ã€ã«ã«ã®ã¿åœ±é¿ããŸãã logstash ã®èŠéå ã«ãã§ã«ååšããåããã¡ã€ã«ã«ã€ããŠã¯ããã®ãµã€ãºããã§ã«èšæ¶ãããŠãããããæ°ãããšã³ããªã®ã¿ããã®ãã¡ã€ã«ã«åã蟌ãŸããããã«ãªããŸãã
ããã§åæ¢ããŠãå ¥åã»ã¯ã·ã§ã³ãå匷ããŸãããã ãªãã·ã§ã³ã¯ãŸã ãããããããŸãããçŸæç¹ã§ã¯ãããªãå®éšãè¡ãã«ã¯ããã§ååã§ãã
ã«ãŒãã£ã³ã°ãšããŒã¿å€æ
次ã®åé¡ã解決ããŠã¿ãŸããããXNUMX ã€ã®ãã£ãã«ããã®ã¡ãã»ãŒãžãããããã®äžéšã¯æ å ±ã¡ãã»ãŒãžã§ãããäžéšã¯ãšã©ãŒ ã¡ãã»ãŒãžã§ãããšããŸãã ã¿ã°ã«ãã£ãŠç°ãªããŸãã æ å ±ãšãªããã®ãããã°ããšã©ãŒãšãªããã®ããããŸãã
åºå£ã§åœŒããåé¢ããå¿ èŠããããŸãã ãããã®ã ãããã£ãã«ã«ã¯æ å ±ã¡ãã»ãŒãžãæžã蟌ã¿ãå¥ã®ãã£ãã«ã«ã¯ãšã©ãŒ ã¡ãã»ãŒãžãæžã蟌ã¿ãŸãã
ãããè¡ãã«ã¯ãå ¥åã»ã¯ã·ã§ã³ãããã£ã«ã¿ãŒãšåºåã«ç§»åããŸãã
ãã£ã«ã¿ãŒ ã»ã¯ã·ã§ã³ã䜿çšããŠãåä¿¡ã¡ãã»ãŒãžã解æããããããããã·ã¥ (ããŒãšå€ã®ãã¢) ãååŸããŸããããã¯æ¢ã«åŠçã§ããŸãã æ¡ä»¶ã«å¿ããŠå解ããŸãã ãããŠåºåã»ã¯ã·ã§ã³ã§ã¯ã¡ãã»ãŒãžãéžæãããããããç¬èªã®ãã£ãã«ã«éä¿¡ããŸãã
grok ã䜿çšããã¡ãã»ãŒãžã®è§£æ
ããã¹ãæååã解æããããããäžé£ã®ãã£ãŒã«ããååŸããããã«ããã£ã«ã¿ãŒ ã»ã¯ã·ã§ã³ã«ç¹å¥ãªãã©ã°ã€ã³ - grok ããããŸãã
ããã§ããã«ã€ããŠè©³ãã説æãããšããç®æšã¯èšå®ããŸããïŒããã«ã€ããŠã¯ã
ãããè¡ãã«ã¯ãå ¥åæååã®åœ¢åŒã決å®ããå¿ èŠããããŸãã ç§ã¯æ¬¡ã®ãããªãã®ãæã£ãŠããŸãïŒ
1 æ
å ±ã¡ãã»ãŒãž1
2 ãšã©ãŒã¡ãã»ãŒãž2
ãããã®ã æåã«èå¥åã次㫠INFO/ERRORããããŠã¹ããŒã¹ãå«ãŸãªãåèªãç¶ããŸãã
ããã»ã©é£ããããšã§ã¯ãããŸããããåäœåçãç解ããã ãã§ååã§ãã
ãããã£ãŠãgrok ãã©ã°ã€ã³ã®ãã£ã«ã¿ãŒ ã»ã¯ã·ã§ã³ã§ãæååã解æããããã®ãã¿ãŒã³ãå®çŸ©ããå¿ èŠããããŸãã
次ã®ããã«ãªããŸãã
filter {
grok {
match => { "message" => ["%{INT:message_id} %{LOGLEVEL:message_type} %{WORD:message_text}"] }
}
}
åºæ¬çã«ã¯æ£èŠè¡šçŸã§ãã INTãLOGLEVELãWORD ãªã©ã®æ¢è£œã®ãã¿ãŒã³ã䜿çšãããŸãã ãããã®èª¬æãšä»ã®ãã¿ãŒã³ã¯ãããã§èŠã€ããããšãã§ããŸãã
ãã®ãã£ã«ã¿ãééãããšãæåå㯠XNUMX ã€ã®ãã£ãŒã«ã (message_idãmessage_typeãmessage_text) ã®ããã·ã¥ã«å€ãããŸãã
ãããã¯åºåã»ã¯ã·ã§ã³ã«è¡šç€ºãããŸãã
if ã³ãã³ãã䜿çšããŠã¡ãã»ãŒãžãåºåã»ã¯ã·ã§ã³ã«ã«ãŒãã£ã³ã°ãã
åºåã»ã¯ã·ã§ã³ã§ã¯ãã¡ãã»ãŒãžã XNUMX ã€ã®ã¹ããªãŒã ã«åå²ããäºå®ã§ããã äžéšã® iNFO ã¯ã³ã³ãœãŒã«ã«åºåããããšã©ãŒãçºçããå Žåã¯ãã¡ã€ã«ã«åºåãããŸãã
ãããã®ã¡ãã»ãŒãžãã©ã®ããã«åé¢ããã°ããã§ãããã? åé¡ã®ç¶æ³ã¯ãã§ã«è§£æ±ºçã瀺åããŠããŸããçµå±ã®ãšãããå°çšã® message_type ãã£ãŒã«ãããã§ã«ããããã®ãã£ãŒã«ã㯠INFO ãš ERROR ã® XNUMX ã€ã®å€ã®ã¿ãåãããšãã§ããŸãã ããã«åºã¥ããŠãif ã¹ããŒãã¡ã³ãã䜿çšããŠéžæãè¡ããŸãã
if [message_type] == "ERROR" {
# ÐЎеÑÑ Ð²ÑвПЎОЌ в Ñайл
} else
{
# ÐЎеÑÑ Ð²ÑвПЎОЌ в stdout
}
ãã£ãŒã«ããšæŒç®åã®æäœã®èª¬æã¯ããã®ã»ã¯ã·ã§ã³ã«ãããŸãã
ããŠãå®éã®çµè«èªäœã«ã€ããŠã
ã³ã³ãœãŒã«åºåãããã§ã¯ãã¹ãŠãæ確ã§ã - stdout {}
ãã ãããã¡ã€ã«ãžã®åºå - ããããã¹ãŠãã³ã³ããããå®è¡ããŠããããšã«æ³šæããŠãã ãããçµæãæžã蟌ããã¡ã€ã«ã«å€éšããã¢ã¯ã»ã¹ã§ããããã«ããã«ã¯ãdocker-compose.yml ã§ãã®ãã£ã¬ã¯ããªãéãå¿ èŠããããŸãã
åèšïŒ
ãã¡ã€ã«ã®åºåã»ã¯ã·ã§ã³ã¯æ¬¡ã®ããã«ãªããŸãã
âšoutput {
if [message_type] == "ERROR" {
file {
path => "/usr/share/logstash/output/test.log"
codec => line { format => "custom format: %{message}"}
}
} else
{stdout {
}
}
}
docker-compose.yml ã§ã¯ãåºåçšã«å¥ã®ããªã¥ãŒã ãè¿œå ããŸãã
version: '3'
networks:
elk:
volumes:
elasticsearch:
driver: local
services:
logstash:
container_name: logstash_one_channel
image: docker.elastic.co/logstash/logstash:6.3.2
networks:
- elk
environment:
XPACK_MONITORING_ENABLED: "false"
ports:
- 5046:5046
volumes:
- ./config/pipelines.yml:/usr/share/logstash/config/pipelines.yml:ro
- ./config/pipelines:/usr/share/logstash/config/pipelines:ro
- ./logs:/usr/share/logstash/input
- ./output:/usr/share/logstash/output
ãããç«ã¡äžããŠè©ŠããŠã¿ããšãXNUMX ã€ã®æµãã«åãããŠããããšãããããŸãã
åºæïŒ habr.com