Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓƵ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ELK¹¹½¨ÔÆʱ´úµÄlogging½â¾ö·½°¸
 
×÷ÕߣºÁã¾ý
  2657  次浏览      19
2020-2-19
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½éÉÜÁË»ùÓÚELK¹¹½¨Ò»¸öÔÆʱ´úÊÕ¼¯²¢·ÖÎölogµÄ½â¾ö·½°¸µÄÏà¹ØÄÚÈÝ£¬Ï£Íû¶ÔÄúÄÜÓÐËù°ïÖú¡£
±¾ÎÄÀ´×Ô΢ÐŹ«ÖÚºÅithellas£¬ÓÉ»ðÁú¹ûÈí¼þLuca±à¼­¡¢ÍƼö¡£

Ò»¡¢¸ÅÊö

Ëæ×ÅÏÖÔÚ¸÷ÖÖÈí¼þϵͳµÄ¸´ÔÓ¶ÈÔ½À´Ô½¸ß£¬ÌرðÊDz¿Êðµ½ÔÆÉÏÖ®ºó£¬ÔÙÏëµÇ¼¸÷¸ö½ÚµãÉϲ鿴¸÷¸öÄ£¿éµÄlog£¬»ù±¾ÊDz»¿ÉÐÐÁË¡£ÒòΪ²»½öЧÂʵÍÏ£¬¶øÇÒÓÐʱÓÉÓÚ°²È«ÐÔ£¬²»¿ÉÄÜÈù¤³Ìʦֱ½Ó·ÃÎʸ÷¸öÎïÀí½Úµã¡£¶øÇÒÏÖÔÚ´ó¹æÄ£µÄÈí¼þϵͳ»ù±¾¶¼²ÉÓü¯ÈºµÄ²¿Êð·½Ê½£¬Òâζ×ŶÔÿ¸öservice£¬»áÆô¶¯¶à¸öÍêÈ«Ò»ÑùµÄPOD¶ÔÍâÌṩ·þÎñ£¬Ã¿¸öcontainer¶¼»á²úÉú×Ô¼ºµÄlog£¬½ö´Ó²úÉúµÄlogÀ´¿´£¬Äã¸ù±¾²»ÖªµÀÊÇÄĸöPOD²úÉúµÄ£¬ÕâÑù¶Ô²é¿´·Ö²¼Ê½µÄÈÕÖ¾¸ü¼ÓÀ§ÄÑ¡£

ËùÒÔÔÚÔÆʱ´ú£¬ÐèÒªÒ»¸öÊÕ¼¯²¢·ÖÎölogµÄ½â¾ö·½°¸¡£Ê×ÏÈÐèÒª½«·Ö²¼ÔÚ¸÷¸ö½ÇÂäµÄlogÊÕ¼¯µ½Ò»¸ö¼¯Öеĵط½£¬·½±ã²é¿´¡£ÊÕ¼¯ÁËÖ®ºó£¬»¹¿ÉÒÔ½øÐи÷ÖÖͳ¼Æ·ÖÎö£¬ÉõÖÁÓÃÁ÷ÐеĴóÊý¾Ý»òmaching learningµÄ·½·¨½øÐзÖÎö¡£µ±È»£¬¶ÔÓÚ´«Í³µÄÈí¼þ²¿Êð·½Ê½£¬Ò²ÐèÒªÕâÑùµÄlogµÄ½â¾ö·½°¸£¬²»¹ý±¾ÎÄÖ÷Òª´ÓÔƵĽǶÈÀ´½éÉÜ¡£

ELK¾ÍÊÇÕâÑùµÄ½â¾ö·½°¸£¬¶øÇÒ»ù±¾¾ÍÊÇÊÂʵÉϵıê×¼¡£ELKÊÇÈý¸ö¿ªÔ´ÏîÄ¿µÄÊ××ÖĸËõд£¬ÈçÏ£º

E: Elasticsearch

L: LogStash

K: Kibana

LogStashµÄÖ÷Òª×÷ÓÃÊÇÊÕ¼¯·Ö²¼ÔÚ¸÷´¦µÄlog²¢½øÐд¦Àí£»ElasticsearchÔòÊÇÒ»¸ö¼¯Öд洢logµÄµØ·½£¬¸üÖØÒªµÄÊÇËüÊÇÒ»¸öÈ«ÎļìË÷ÒÔ¼°·ÖÎöµÄÒýÇ棬ËüÄÜÈÃÓû§ÒÔ½üºõʵʱµÄ·½Ê½À´²é¿´¡¢·ÖÎöº£Á¿µÄÊý¾Ý¡£KibanaÔòÊÇΪElasticsearch¿ª·¢µÄÇ°¶ËGUI£¬ÈÃÓû§¿ÉÒԺܷ½±ãµÄÒÔͼÐλ¯µÄ½Ó¿Ú²éѯElasticsearchÖд洢µÄÊý¾Ý£¬Í¬Ê±Ò²ÌṩÁ˸÷ÖÖ·ÖÎöµÄÄ£¿é£¬±ÈÈç¹¹½¨dashboardµÄ¹¦ÄÜ¡£

ÎÒ¸öÈËÈÏΪ½«ELKÖеÄLÀí½â³ÉLogging Agent¸üºÏÊÊ¡£ElasticsearchºÍKibana»ù±¾¾ÍÊÇ´æ´¢¡¢¼ìË÷ºÍ·ÖÎölogµÄ±ê×¼·½°¸£¬¶øLogStashÔò²¢²»ÊÇΨһµÄÊÕ¼¯logµÄ·½°¸£¬FluentdºÍFilebeatsÒ²ÄÜÓÃÓÚÊÕ¼¯log¡£ËùÒÔÏÖÔÚÍøÉÏÓÐELK£¬EFKÖ®ÀàµÄËõд¡£

Ò»°ã²ÉÓõļܹ¹ÈçÏÂͼËùʾ¡£Í¨³£Ò»¸öСÐ͵ÄclusterÓÐÈý¸ö½Úµã£¬ÔÚÕâÈý¸ö½ÚµãÉÏ¿ÉÄÜ»áÔËÐм¸Ê®¸öÉõÖÁÉÏ°Ù¸öÈÝÆ÷¡£¶øÎÒÃÇÖ»ÐèÒªÔÚÿ¸ö½ÚµãÉÏÆô¶¯Ò»¸ölogging agentµÄʵÀý£¨ÔÚkubernetesÖоÍÊÇDaemonSetµÄ¸ÅÄ¼´¿É¡£

¶þ¡¢Filebeats¡¢LogStash¡¢FluentdÈýÕßµÄÇø±ðºÍÁªÏµ

ÕâÀïÓбØÒª¶ÔFilebeats¡¢LogStashºÍFluentdÈýÕßÖ®¼äµÄÁªÏµºÍÇø±ð×öÒ»¸ö¼òÒªµÄ˵Ã÷¡£FilebeatsÊÇÒ»¸öÇáÁ¿¼¶µÄÊÕ¼¯±¾µØlogÊý¾ÝµÄ·½°¸£¬¹Ù·½¶ÔFilebeatsµÄ˵Ã÷ÈçÏ¡£¿ÉÒÔ¿´³öFilebeats¹¦ÄܱȽϵ¥Ò»£¬Ëü½ö½öÖ»ÄÜÊÕ¼¯±¾µØµÄlog£¬µ«²¢²»ÄܶÔÊÕ¼¯µ½µÄLog×öʲô´¦Àí£¬ËùÒÔͨ³£Filebeatsͨ³£ÐèÒª½«ÊÕ¼¯µ½µÄlog·¢Ë͵½Logstash×ö½øÒ»²½µÄ´¦Àí¡£

Filebeat is a log data shipper for local files. Installed as an agent on your servers, Filebeat monitors the log directories or specific log files, tails the files, and forwards them either to Elasticsearch or Logstash for indexing

LogStashºÍFluentd¶¼¾ßÓÐÊÕ¼¯²¢´¦ÀílogµÄÄÜÁ¦£¬ÍøÉÏÓкܶà¹ØÓÚ¶þÕߵĶԱȣ¬Ìṩһ¸öдµÃ±È½ÏºÃµÄÎÄÕÂÁ´½ÓÈçÏ¡£¹¦ÄÜÉ϶þÕßÆì¹ÄÏ൱£¬µ«LogStashÏûºÄ¸ü¶àµÄmemory£¬¶Ô´ËLogStashµÄ½â¾ö·½°¸ÊÇʹÓÃFilebeats´Ó¸÷¸öÒ¶×Ó½ÚµãÉÏÊÕ¼¯log£¬µ±È»FluentdÒ²ÓжÔÓ¦µÄFluent Bit¡£

https://logz.io/blog/fluentd-logstash/

ÁíÍâÒ»¸öÖØÒªµÄÇø±ðÊÇFluentd³éÏóÐÔ×öµÃ¸üºÃ£¬¶ÔÓû§ÆÁ±ÎÁ˵ײãϸ½ÚµÄ·±Ëö¡£×÷ÕßµÄÔ­»°ÈçÏ£º

Fluentd¡¯s approach is more declarative whereas Logstash¡¯s method is procedural. For programmers trained in procedural programming, Logstash¡¯s configuration can be easier to get started. On the other hand, Fluentd¡¯s tag-based routing allows complex routing to be expressed cleanly.

ËäÈ»×÷Õß˵ÊÇÒªÖÐÁ¢µÄ¶Ô¶þÕߣ¨LogStashºÍFluentd£©½øÐжԱȣ¬µ«Êµ¼ÊÉÏÆ«ÏòÐÔºÜÃ÷ÏÔÁË£º£©¡£±¾ÎÄÒ²Ö÷Òª»ùÓÚFluentd½øÐнéÉÜ£¬²»¹ý×ÜÌå˼·¶¼ÊÇÏàͨµÄ¡£

¶îÍâ˵һµã£¬Filebeats¡¢LogStash¡¢ElasticsearchºÍKibanaÊÇÊôÓÚͬһ¼Ò¹«Ë¾µÄ¿ªÔ´ÏîÄ¿£¬¹Ù·½ÎĵµÈçÏ£º

https://www.elastic.co/guide/index.html

FluentdÔòÊÇÁíÒ»¼Ò¹«Ë¾µÄ¿ªÔ´ÏîÄ¿£¬¹Ù·½ÎĵµÈçÏ£º

https://docs.fluentd.org/v1.0/articles/quickstart

Èý¡¢logging agent (Fluentd)

Ç°ÃæÒѾ­Ëµ¹ý£¬Ö»ÒªÔÚÿ¸öÎïÀí½ÚµãÉÏÆô¶¯Ò»¸ölogging agentµÄʵÀý¼´¿É£¨±¾ÎÄÒÔfluentdΪÀý£©¡£µ«ÊÇÔÚÿ¸ö½ÚµãÉÏ£¬ÍùÍùÔËÐÐ׿¸Ê®¸öÉõÖÁÉÏ°Ù¸öÈÝÆ÷£¬¶øÇÒÌṩ²»Í¬µÄ·þÎñ£¬Ã¿¸ö½ÚµãÉϵÄlogging agent»áÊÕ¼¯µ½µ±Ç°½ÚµãÉÏËùÓÐÈÝÆ÷µÄlog¡£¶øÓÐʱÎÒÃÇÖ»¹ØÐÄÆäÖÐÒ»²¿·ÖÈÝÆ÷²úÉúµÄlog£¬ÓÐʱҲÐèÒª¶ÔÊÕ¼¯µÄlog×öһЩ¼òµ¥µÄ´¦Àí£¬Õâʱ¾ÍÐèÒª¶ÔfluentdÅäÖÃһЩfilter¡£Èç¹û²»ÐèÒª×öÈκιýÂË»òÆäËü´¦Àí£¬ÄÇfilebeat¾ÍÄÜÂú×ãÐèÇóÁË¡£

FluentdÒÔpipelineµÄ·½Ê½À´´¦ÀíÊÕ¼¯µ½µÄÿһÌõlogÏûÏ¢£¬Óɸ÷ÖÖpluginÀ´´¦Àílog¡£µäÐ͵Ĵ¦ÀíÂß¼­ÈçÏÂͼËùʾ£º

Ê×ÏÈÊÇinput pluginÊÕ¼¯log£¬fluentd¼È¿ÉÒÔÖ±½Ó¶ÁÈ¡logÎļþÖеÄÄÚÈÝ£¬Ò²¿ÉÒÔ½ÓÊÜsocket´«¹ýÀ´µÄlogÏûÏ¢¡£¹ØÓÚinput pluginµÄ¾ßÌåÐÅÏ¢£¬¿ÉÒԲο¼ÏÂÃæµÄÁ´½Ó£º

https://docs.fluentd.org/v1.0/articles/input-plugin-overview

ÀýÈçÏÂÃæµÄÀý×ÓÊÇ´Ó/var/lig/docker/container/*/*.logÖжÁÈ¡logÏûÏ¢£¬ÖÁÓÚΪʲôҪ´ÓÕâ¸öĿ¼¶ÁÈ¡log£¬ºóÃæ»á½âÊÍ¡£

<source>
@type tail
path /var/lib/docker/containers/*/*.log
tag fluentd
<parse>
@type json
time_key time
keep_time_key true
</parse>
refresh_interval 5
</source>

grep filter×÷ÓÃÊǹýÂ˵ôÎÒÃDz»¸ÐÐËȤµÄlogÏûÏ¢¡£Õâ¸öºÜºÃÀí½â£¬¾ÍºÍÎÒÃÇƽʱÓÃgrepÃüÁîËÑË÷ÎļþÄÚÈÝÒ»Ñù¡£¹ØÓÚgrep filter£¬²Î¿¼ÏÂÃæµÄÁ´½Ó£º

https://docs.fluentd.org/v1.0/articles/filter_grep

ÀýÈçÏÂÃæµÄÀý×Ó¾ÍÊÇÖ»ÓÐÆ¥Åäģʽ"myproject.*hello"µÄlogÏûÏ¢²Å»á±£ÁôÏÂÀ´£¬½øÈëpipelineµÄÏÂÒ»¸ö»·½Ú¼ÌÐø´¦Àí¡£

<filter **>
@type grep
<regexp>
key log
pattern myproject.*hello
</regexp>
</filter>

parser pluginÔòÊǸæËßfluentd°´ÕÕÌض¨µÄ¸ñʽ½âÎölogÏûÏ¢£¬¾ßÌå¿É²Î¿¼ÏÂÃæµÄÁ´½Ó£º

https://docs.fluentd.org/v1.0/articles/parser-plugin-overview

ÀýÈçÏÂÃæµÄÀý×Ó¾ÍÊÇÈÃfluentd°´ÕÕjson¸ñʽ½âÎöij¸öfieldµÄÄÚÈÝ¡£ÕâÀïÏÂÎÄ»á½øÒ»²½½âÊÍ¡£

<filter **>
@type parser
format json
key_name log
reserve_data true
hash_value_field log
</filter>

×îºó¾ÍÊÇͨ¹ýoutput plugin½«logÊý¾Ý·¢ËͳöÈ¥£¬¾ßÌå²Î¿¼£º

https://docs.fluentd.org/v1.0/articles/output-plugin-overview

ÏÂÃæµÄÀý×Ӿͽ«´¦ÀíÖ®ºóµÄlog·¢Ë͵½elasticsearch£¬

<match fluentd>
@type elasticsearch
host elasticsearch
port 9200
flush_interval 10s
</match>

ËÄ¡¢Docker logging driver

ÌÖÂÛlogging£¬¾ÍÎÞ·¨±Ü¿ªDocker logging driverÕâ¸ö»°Ìâ¡£ÏÖÔÚ²¿ÊðÔÚÔÆÉϸ÷ÖÖÓ¦Óö¼ÊÇÔËÐÐÔÚÈÝÆ÷Öеģ¬µ±ÎÒÃǵÄÓ¦Óý«logÏûÏ¢Êä³öµ½stdout»òÕßstderrµÄʱºò£¬Docker engineÊÇ°´ÕÕÅäÖõÄlogging driverÀ´½«logÏûÏ¢Êä³öµ½Ìض¨µÄÄ¿µÄµØ¡£DockerÖ§³ÖµÄlogging driverÓкܶ࣬ĬÈÏʹÓõÄlogging driverÊÇjson-file£¬Ò²¾ÍÊÇ˵½«¸÷¸öÓ¦ÓÃÊä³öµ½stdout»òstderrµÄlogĬÈÏ°´ÕÕjson¸ñʽÊä³öµ½ÏÂÃæµÄÎļþÖУº

/var/lib/docker/containers/${container_id}/*.log

Õâ¾ÍÊÇΪʲôΪfluentdÅäÖõÄinput pluginÒª´Ó/var/lib/docker/containers/*/*.log¶ÁÈ¡logµÄÔ­Òò¡£

ÁíÍ⣬json-file»á½«Ó¦ÓóÌÐò²úÉúµÄÿÌõlogÏûÏ¢£¬·â×°µ½field "log"ÖС£ÀýÈç¼ÙÉèij¸öAPPÊä³öÏÂÃæµÄlogµ½stdout£¬

{"level":"info", "msg":"hello world"}

µÄ

ÄÇôjson-file»á²úÉúÏÂÃæµÄlog£¬

{"log": "{\"level\":\"info\", \"msg\":\"hello world\"}", "stream":"stdout","time":"2018-01-27T02:38:16.382229755Z"}

Õâ¾ÍÊÇΪʲôÉÏÃæҪΪfluentdÅäÖÃÒ»¸öparserµÄÔ­Òò¡£

¿ÉÒԱ༭/etc/docker/daemon.jsonÀ´ÐÞ¸ÄĬÈϵÄlogging driver£¬

$cat /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m"
}
}

¿ÉÒԲο¼ÏÂÃæµÄÁ´½Ó£¬À´Á˽â¸ü¶àµÄ¹ØÓÚdocker logging driverµÄÄÚÈÝ£¬

https://docs.docker.com/config /containers/logging/configure/

Îå¡¢ÈçºÎÖ§³Ömulti-tenant

²¿ÊðÔÚclusterÖеÄÓ¦ÓÃÒ»°ã¶¼»á¶à¸ö×⻧Ìṩ·þÎñ£¬ÄÇôÈçºÎÇø·Ö²»Í¬×⻧µÄÊý¾Ý¾ÍÊDz»µÃ²»Ãæ¶ÔµÄ°²È«ÎÊÌâ¡£Ò²¾ÍÊÇ˵ÿ¸ö×⻧ֻÄÜ¿´µ½×Ô¼ºµÄÊý¾Ý£¨×ÔÈ»°üº¬±¾ÎÄÌÖÂÛµÄlogÊý¾Ý£©¡£Elasticsearch¶ÔÕâ¸öÎÊÌâµÄ½¨ÒéµÄ½â¾ö·½°¸¾ÍÊÇΪ²»Í¬µÄ×⻧½¨Á¢²»Í¬µÄIndex¡£

Index¾ÍÊÇÒ»×é¾ßÓÐÏàͬÌØÐÔµÄÎĵµµÄ¼¯ºÏ¡£¹ØÓÚElasticsearchµÄ»ù±¾¸ÅÄÇë²Î¿¼ÏÂÃæµÄÁ´½Ó£º

https://www.elastic.co/guide/en /elasticsearch/reference/current/_basic_concepts.html

Ê×ÏÈÐèÒª¸ÄдÉÏÃæΪfluentdÅäÖõÄoutput plugin£¬Ê¹fluentd¿ÉÒÔÖÇÄܵؽ«²»Í¬tenantµÄlogÏûÏ¢·¢Ë͵½elasticsearchÖв»Í¬µÄindex¡£ÎÒÃÇÖ»ÒªÔÚÿÌõlogÏûÏ¢ÖмÓÈëtenantidµÄÖµ£¬output plugin½âÎö³ö¸ÃÖµºó£¬¾Í¿ÉÒÔºÜÈÝÒ׵ķֱð²»Í¬tenantµÄÊý¾Ý¡£¡¡

Kibana×Ô´Ó°æ±¾6.0Ö®ºó£¬Kibanaͨ¹ýX-PackÌṩÁË»ùÓÚ½ÇÉ«µÄ·ÃÎÊ¿ØÖÆ£¨Role-based Access Control£©£¬¾ÍÊÇ¿ÉÒÔ¸ø²»Í¬µÄÓû§·ÖÅ䲻ͬµÄ½ÇÉ«£¬¶øÕë¶Ô²»Í¬µÄ½ÇÉ«¸³Óè·ÃÎʲ»Í¬IndexµÄȨÏÞ¡£ÕâÑù¾Í¿ØÖÆÁËÿ¸ö×⻧µÇ¼ºóÖ»ÄÜ·ÃÎÊÊôÓÚ×Ô¼ºµÄIndexÖеÄÊý¾Ý¡£

½«±¾ÎÄ¿ªÊ¼µÄ¼Ü¹¹Í¼Õë¶Ômulti-tenant¿ÉÒÔ×öÈçÏÂÐ޸ģ¬

Áù¡¢Êý¾Ý·ÖÎö

¶ÔÓÚÊÕ¼¯ÉÏÀ´µÄlogÊý¾Ý£¬¿ÉÒÔ´ÓÏÂÃæÈý¸ö·½Ãæ½øÐзÖÎö£º

£±¡¢KibanaÌṩÁËÒ»¸ö½»»¥Ê½µÄ²éѯ½Ó¿Ú£¬¿ÉÒÔ½üºõʵʱµÄ²éѯÎÒÃǸÐÐËȤµÄlogÊý¾Ý¡£

£²¡¢½èÖúKibanaµÄvisualizationºÍdashboard¿ÉÒԺܷ½±ãµØ¶ÔlogÊý¾Ý½øÐпÉÊÓ»¯Õ¹ÏÖ¡£

£³¡¢ÀûÓÃX-PackÌṩµÄMaching learning½øÐдóÊý¾Ý·ÖÎö¡£

ÕâÀïÔÝʱ²»ÉîÈëÕ¹¿ªÌÖÂÛ£¬½«À´¿ÉÄÜ»á·ÖÏí¸ü¶àÏà¹ØµÄÐĵúÍÌå»á¡£

 
   
2657 ´Îä¯ÀÀ       19
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ