±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁË»ùÓÚ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½øÐдóÊý¾Ý·ÖÎö¡£
ÕâÀïÔÝʱ²»ÉîÈëÕ¹¿ªÌÖÂÛ£¬½«À´¿ÉÄÜ»á·ÖÏí¸ü¶àÏà¹ØµÄÐĵúÍÌå»á¡£ |