ELKƽ̨½éÉÜ
ÔÚËÑË÷ELK×ÊÁϵÄʱºò£¬·¢ÏÖÕâÆªÎÄÕ±ȽϺã¬ÓÚÊÇÕª³Ò»Ð¡¶Î£º
ÒÔÏÂÄÚÈÝÀ´×Ô£ºhttp://baidu.blog.51cto.com/71938/1676798
ÈÕÖ¾Ö÷Òª°üÀ¨ÏµÍ³ÈÕÖ¾¡¢Ó¦ÓóÌÐòÈÕÖ¾ºÍ°²È«ÈÕÖ¾¡£ÏµÍ³ÔËάºÍ¿ª·¢ÈËÔ±¿ÉÒÔͨ¹ýÈÕÖ¾Á˽â·þÎñÆ÷ÈíÓ²¼þÐÅÏ¢¡¢¼ì²éÅäÖùý³ÌÖеĴíÎó¼°´íÎó·¢ÉúµÄÔÒò¡£¾³£·ÖÎöÈÕÖ¾¿ÉÒÔÁ˽â·þÎñÆ÷µÄ¸ººÉ£¬ÐÔÄܰ²È«ÐÔ£¬´Ó¶ø¼°Ê±²ÉÈ¡´ëÊ©¾ÀÕý´íÎó¡£
ͨ³££¬ÈÕÖ¾±»·ÖÉ¢µÄ´¢´æ²»Í¬µÄÉ豸ÉÏ¡£Èç¹ûÄã¹ÜÀíÊýÊ®ÉϰŲ̀·þÎñÆ÷£¬Ä㻹ÔÚʹÓÃÒÀ´ÎµÇ¼ÿ̨»úÆ÷µÄ´«Í³·½·¨²éÔÄÈÕÖ¾¡£ÕâÑùÊDz»ÊǸоõºÜ·±ËöºÍЧÂʵÍÏ¡£µ±ÎñÖ®¼±ÎÒÃÇʹÓü¯Öл¯µÄÈÕÖ¾¹ÜÀí£¬ÀýÈ磺¿ªÔ´µÄsyslog£¬½«ËùÓзþÎñÆ÷ÉϵÄÈÕÖ¾ÊÕ¼¯»ã×Ü¡£
¼¯Öл¯¹ÜÀíÈÕÖ¾ºó£¬ÈÕÖ¾µÄͳ¼ÆºÍ¼ìË÷ÓÖ³ÉΪһ¼þ±È½ÏÂé·³µÄÊÂÇ飬һ°ãÎÒÃÇʹÓÃgrep¡¢awkºÍwcµÈLinuxÃüÁîÄÜʵÏÖ¼ìË÷ºÍͳ¼Æ£¬µ«ÊǶÔÓÚÒªÇó¸ü¸ßµÄ²éѯ¡¢ÅÅÐòºÍͳ¼ÆµÈÒªÇóºÍÅÓ´óµÄ»úÆ÷ÊýÁ¿ÒÀȻʹÓÃÕâÑùµÄ·½·¨ÄÑÃâÓеãÁ¦²»´ÓÐÄ¡£
¿ªÔ´ÊµÊ±ÈÕÖ¾·ÖÎöELKƽ̨Äܹ»ÍêÃÀµÄ½â¾öÎÒÃÇÉÏÊöµÄÎÊÌ⣬ELKÓÉElasticSearch¡¢LogstashºÍKiabanaÈý¸ö¿ªÔ´¹¤¾ß×é³É¡£¹Ù·½ÍøÕ¾£ºhttps://www.elastic.co/products
ElasticsearchÊǸö¿ªÔ´·Ö²¼Ê½ËÑË÷ÒýÇæ£¬ËüµÄÌØµãÓУº·Ö²¼Ê½£¬ÁãÅäÖã¬×Ô¶¯·¢ÏÖ£¬Ë÷Òý×Ô¶¯·ÖƬ£¬Ë÷Òý¸±±¾»úÖÆ£¬restful·ç¸ñ½Ó¿Ú£¬¶àÊý¾ÝÔ´£¬×Ô¶¯ËÑË÷¸ºÔصȡ£
LogstashÊÇÒ»¸öÍêÈ«¿ªÔ´µÄ¹¤¾ß£¬Ëû¿ÉÒÔ¶ÔÄãµÄÈÕÖ¾½øÐÐÊÕ¼¯¡¢¹ýÂË£¬²¢½«Æä´æ´¢¹©ÒÔºóʹÓã¨È磬ËÑË÷£©¡£
Kibana Ò²ÊÇÒ»¸ö¿ªÔ´ºÍÃâ·ÑµÄ¹¤¾ß£¬ËüKibana¿ÉÒÔΪ Logstash ºÍ ElasticSearch
ÌṩµÄÈÕÖ¾·ÖÎöÓÑºÃµÄ Web ½çÃæ£¬¿ÉÒÔ°ïÖúÄú»ã×Ü¡¢·ÖÎöºÍËÑË÷ÖØÒªÊý¾ÝÈÕÖ¾¡£
»ÁËÒ»¸öELK¹¤×÷µÄÔÀíͼ£º
Èçͼ£ºLogstashÊÕ¼¯AppServer²úÉúµÄLog£¬²¢´æ·Åµ½ElasticSearch¼¯ÈºÖУ¬¶øKibanaÔò´ÓES¼¯ÈºÖвéѯÊý¾ÝÉú³Éͼ±í£¬ÔÙ·µ»Ø¸øBrowser¡£
ELKƽ̨´î½¨
ϵͳ»·¾³
System: Centos release 6.7 (Final)
ElasticSearch: 2.1.0
Logstash: 2.1.1
Kibana: 4.3.0
Java: openjdk version "1.8.0_65"
×¢£ºÓÉÓÚLogstashµÄÔËÐÐÒÀÀµÓÚJava»·¾³£¬ ¶øLogstash 1.5ÒÔÉϰ汾²»µÍÓÚjava
1.7£¬Òò´ËÍÆ¼öʹÓÃ×îа汾µÄJava¡£ÒòΪÎÒÃÇÖ»ÐèÒªJavaµÄÔËÐл·¾³£¬ËùÒÔ¿ÉÒÔÖ»°²×°JRE£¬²»¹ýÕâÀïÎÒÒÀȻʹÓÃJDK£¬Çë×ÔÐÐËÑË÷°²×°¡£
ELKÏÂÔØ£ºhttps://www.elastic.co/downloads/
ÅäÖÃElasticSearch£º
tar -zxvf elasticsearch-2.1.0.tar.gz cd elasticsearch-2.1.0 |
°²×°Head²å¼þ£¨Optional£©£º
./bin/plugin install mobz/elasticsearch-head |
È»ºó±à¼ESµÄÅäÖÃÎļþ£º
vi config/elasticsearch.yml |
ÐÞ¸ÄÒÔÏÂÅäÖÃÏ
cluster.name=es_cluster node.name=node0 path.data=/tmp/elasticsearch/data path.logs=/tmp/elasticsearch/logs #µ±Ç°hostname»òIP£¬ÎÒÕâÀïÊÇcentos2 network.host=centos2 network.port=9200 |
ÆäËûµÄÑ¡Ïî±£³ÖĬÈÏ£¬È»ºóÆô¶¯ES£º
¿ÉÒÔ¿´µ½£¬Ëü¸úÆäËûµÄ½ÚµãµÄ´«Êä¶Ë¿ÚΪ9300£¬½ÓÊÜHTTPÇëÇóµÄ¶Ë¿ÚΪ9200¡£
ʹÓÃctrl+CÍ£Ö¹¡£µ±È»£¬Ò²¿ÉÒÔʹÓúǫ́½ø³ÌµÄ·½Ê½Æô¶¯ES£º
./bin/elasticsearch &
È»ºó¿ÉÒÔ´ò¿ªÒ³Ãælocalhost:9200£¬½«»á¿´µ½ÒÔÏÂÄÚÈÝ£º
·µ»ØÕ¹Ê¾ÁËÅäÖõÄcluster_nameºÍname£¬ÒÔ¼°°²×°µÄESµÄ°æ±¾µÈÐÅÏ¢¡£
¸Õ¸Õ°²×°µÄhead²å¼þ£¬ËüÊÇÒ»¸öÓÃä¯ÀÀÆ÷¸úES¼¯Èº½»»¥µÄ²å¼þ£¬¿ÉÒԲ鿴¼¯Èº×´Ì¬¡¢¼¯ÈºµÄdocÄÚÈÝ¡¢Ö´ÐÐËÑË÷ºÍÆÕͨµÄRestÇëÇóµÈ¡£ÏÖÔÚÒ²¿ÉÒÔʹÓÃËü´ò¿ªlocalhost:9200/_plugin/headÒ³ÃæÀ´²é¿´ES¼¯Èº×´Ì¬£º
¿ÉÒÔ¿´µ½£¬ÏÖÔÚ£¬ES¼¯ÈºÖÐûÓÐindex£¬Ò²Ã»ÓÐtype£¬Òò´ËÕâÁ½ÌõÊǿյġ£
LogstashµÄ¹¦ÄÜÈçÏ£º
ÆäʵËü¾ÍÊÇÒ»¸öÊÕ¼¯Æ÷¶øÒÑ£¬ÎÒÃÇÐèҪΪËüÖ¸¶¨InputºÍOutput£¨µ±È»InputºÍOutput¿ÉÒÔΪ¶à¸ö£©¡£ÓÉÓÚÎÒÃÇÐèÒª°ÑJava´úÂëÖÐLog4jµÄÈÕÖ¾Êä³öµ½ElasticSearchÖУ¬Òò´ËÕâÀïµÄInput¾ÍÊÇLog4j£¬¶øOutput¾ÍÊÇElasticSearch¡£
ÅäÖÃLogstash£º
tar -zxvf logstash-2.1.1.tar.gz cd logstash-2.1.1 |
±àдÅäÖÃÎļþ(Ãû×ÖºÍλÖÿÉÒÔËæÒ⣬ÕâÀïÎÒ·ÅÔÚconfigĿ¼Ï£¬È¡ÃûΪlog4j_to_es.conf)£º
mkdir config vi config/log4j_to_es.conf |
ÊäÈëÒÔÏÂÄÚÈÝ£º
# For detail structure of this file # Set: https://www.elastic.co /guide/en/logstash/current/configuration-file-structure.html input { # For detail config for log4j as input, # See: https://www.elastic.co/ guide/en/logstash/current/plugins-inputs-log4j.html log4j { mode => "server" host => "centos2" port => 4567 } } filter { #Only matched data are send to output. } output { # For detail config for elasticsearch as output, # See: https://www.elastic.co /guide/en/logstash/current/plugins-outputs-elasticsearch.html elasticsearch { action => "index" #The operation on ES hosts => "centos2:9200" #ElasticSearch host, can be array. index => "ec" #The index to write data to, can be any string. } } |
logstashÃüÁîÖ»ÓÐ2¸ö²ÎÊý£º
Òò´ËʹÓÃagentÀ´Æô¶¯Ëü£¨Ê¹ÓÃ-fÖ¸¶¨ÅäÖÃÎļþ£©£º
./bin/logstash agent -f config/log4j_to_es.conf |

µ½ÕâÀÎÒÃÇÒѾ¿ÉÒÔʹÓÃLogstashÀ´ÊÕ¼¯ÈÕÖ¾²¢±£´æµ½ESÖÐÁË£¬ÏÂÃæÀ´¿´¿´ÏîÄ¿´úÂë¡£
Java씀ÕÕÀýÏÈ¿´ÏîÄ¿½á¹¹Í¼£º

pom.xml£¬ºÜ¼òµ¥£¬Ö»Óõ½ÁËLog4j¿â£º
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> |
log4j.properties£¬½«Log4jµÄÈÕÖ¾Êä³öµ½SocketAppender£¬ÒòΪ¹ÙÍøÊÇÕâô˵µÄ£º

log4j.rootLogger=INFO,console
# for package com.demo.elk, log would be sent
to socket appender.
log4j.logger.com.demo.elk=DEBUG, socket
# appender socket
log4j.appender.socket=org.apache.log4j.net.SocketAppender
log4j.appender.socket.Port=4567
log4j.appender.socket.RemoteHost=centos2
log4j.appender.socket.layout=org.apache.log4j.PatternLayout
log4j.appender.socket.layout.ConversionPattern=%d
[%-5p] [%l] %m%n
log4j.appender.socket.ReconnectionDelay=10000
# appender console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d
[%-5p] [%l] %m%n |
×¢Ò⣺ÕâÀïµÄ¶Ë¿ÚºÅÐèÒª¸úLogstash¼àÌýµÄ¶Ë¿ÚºÅÒ»Ö£¬ÕâÀïÊÇ4567¡£
Application.java£¬Ê¹ÓÃLog4jµÄLOGGER´òÓ¡ÈÕÖ¾¼´¿É£º
package com.demo.elk;
import org.apache.log4j.Logger;
public class Application {
private static final Logger LOGGER = Logger.getLogger(Application.class);
public static void main(String[] args) throws
Exception {
for (int i = 0; i < 10; i++) {
LOGGER.error("Info log [" + i + "].");
Thread.sleep(500);
}
}
} |
ÓÃHead²å¼þ²é¿´ES״̬ºÍÄÚÈÝ
ÔËÐÐApplication.java£¬ÏÈ¿´¿´consoleµÄÊä³ö£¨µ±È»£¬Õâ¸öÊä³öÖ»ÊÇΪÁË×öÑéÖ¤£¬²»Êä³öµ½consoleÒ²¿ÉÒԵģ©£º

ÔÙÀ´¿´¿´ESµÄheadÒ³Ãæ£º

Çл»µ½Browser±êÇ©£º

µ¥»÷ijһ¸öÎĵµ£¨doc£©£¬Ôò»áչʾ¸ÃÎĵµµÄËùÓÐÐÅÏ¢£º

¿ÉÒÔ¿´µ½£¬³ýÁË»ù´¡µÄmessage×Ö¶ÎÊÇÎÒÃǵÄÈÕÖ¾ÄÚÈÝ£¬Logstash»¹ÎªÎÒÃÇÔö¼ÓÁËÐí¶à×ֶΡ£¶øÔÚhttps://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.htmlÖÐÒ²Ã÷ȷ˵Ã÷ÁËÕâÒ»µã£º

ÉÏÃæÊ¹ÓÃÁËESµÄHead²å¼þ¹Û²ìÁËES¼¯ÈºµÄ״̬ºÍÊý¾Ý£¬µ«ÕâÖ»ÊǸö¼òµ¥µÄÓÃÓÚ¸úES½»»¥µÄÒ³Ãæ¶øÒÑ£¬²¢²»ÄÜÉú³É±¨±í»òÕßͼ±íʲôµÄ£¬½ÓÏÂÀ´Ê¹ÓÃKibanaÀ´Ö´ÐÐËÑË÷²¢Éú³Éͼ±í¡£
Kibana
ÅäÖÃKibana:
tar -zxvf kibana-4.3.0-linux-x86.tar.gz cd kibana-4.3.0-linux-x86 vi config/kibana.yml |
ÐÞ¸ÄÒÔϼ¸ÏÓÉÓÚÊǵ¥»ú°æµÄ£¬Òò´ËhostµÄÖµÒ²¿ÉÒÔʹÓÃlocalhostÀ´´úÌæ£¬ÕâÀï½ö½ö×÷ΪÑÝʾ£©£º
server.port: 5601 server.host: ¡°centos2¡± elasticsearch.url: http://centos2:9200 kibana.index: ¡°.kibana¡± |
Æô¶¯kibana£º

ÓÃä¯ÀÀÆ÷´ò¿ª¸ÃµØÖ·£º

ΪÁ˺óÐøÊ¹ÓÃKibana£¬ÐèÒªÅäÖÃÖÁÉÙÒ»¸öIndexÃû×Ö»òÕßPattern£¬ËüÓÃÓÚÔÚ·ÖÎöʱȷ¶¨ESÖеÄIndex¡£ÕâÀïÎÒÊäÈë֮ǰÅäÖõÄIndexÃû×Öapplog£¬Kibana»á×Ô¶¯¼ÓÔØ¸ÃIndexÏÂdocµÄfield£¬²¢×Ô¶¯Ñ¡ÔñºÏÊʵÄfieldÓÃÓÚͼ±êÖеÄʱ¼ä×ֶΣº

µã»÷Createºó£¬¿ÉÒÔ¿´µ½×ó²àÔö¼ÓÁËÅäÖõÄIndexÃû×Ö£º

½ÓÏÂÀ´Çл»µ½Discover±êÇ©ÉÏ£¬×¢ÒâÓÒÉϽÇÊDzéѯµÄʱ¼ä·¶Î§£¬Èç¹ûûÓвéÕÒµ½Êý¾Ý£¬ÄÇôÄã¾Í¿ÉÄÜÐèÒªµ÷ÕûÕâ¸öʱ¼ä·¶Î§ÁË£¬ÕâÀïÎÒÑ¡ÔñToday£º

½ÓÏÂÀ´¾ÍÄÜ¿´µ½ESÖеÄÊý¾ÝÁË£º

Ö´ÐÐËÑË÷¿´¿´ÄØ£º

µã»÷Óұߵı£´æ°´Å¥£¬±£´æ¸Ã²éѯΪsearch_all_logs¡£½ÓÏÂÀ´È¥VisualizeÒ³Ãæ£¬µã»÷н¨Ò»¸öÖù״ͼ£¨Vertical
Bar Chart£©£¬È»ºóÑ¡Ôñ¸Õ¸Õ±£´æµÄ²éѯsearch_all_logs£¬Ö®ºó£¬Kibana½«Éú³ÉÀàËÆÓÚÏÂͼµÄÖù״ͼ£¨Ö»ÓÐ10ÌõÈÕÖ¾£¬¶øÇÒÊÇÔÚͬһʱ¼ä¶ÎµÄ£¬±È½Ï³ó£¬µ«×ã¿ÉÒÔ˵Ã÷ÎÊÌâÁË£º)
£©£º

Äã¿ÉÒÔÔÚ×ó±ßÉèÖÃͼÐεĸ÷Ïî²ÎÊý£¬µã»÷Apply Changes°´Å¥£¬ÓұߵÄͼÐν«±»¸üС£Í¬Àí£¬ÆäËûÀàÐ͵ÄͼÐζ¼¿ÉÒÔʵʱ¸üС£
µã»÷Óұߵı£´æ£¬±£´æ´Ëͼ£¬ÃüÃûΪsearch_all_logs_visual¡£½ÓÏÂÀ´Çл»µ½DashboardÒ³Ãæ£º

µ¥»÷н¨°´Å¥£¬Ñ¡Ôñ¸Õ¸Õ±£´æµÄsearch_all_logs_visualͼÐΣ¬Ãæ°åÉϽ«Õ¹Ê¾¸Ãͼ£º

Èç¹ûÓн϶àÊý¾Ý£¬ÎÒÃÇ¿ÉÒÔ¸ù¾ÝÒµÎñÐèÇóºÍ¹Ø×¢µãÔÚDashboardÒ³ÃæÌí¼Ó¶à¸öͼ±í£ºÖùÐÎͼ£¬ÕÛÏßͼ£¬µØÍ¼£¬±ýͼµÈµÈ¡£µ±È»£¬ÎÒÃÇ¿ÉÒÔÉèÖøüÐÂÆµÂÊ£¬ÈÃͼ±í×Ô¶¯¸üУº

Èç¹ûÉèÖõÄʱ¼ä¼ä¸ô¹»¶Ì£¬¾ÍºÜÇ÷½üÓÚʵʱ·ÖÎöÁË¡£
µ½ÕâÀELKƽ̨²¿ÊðºÍ»ù±¾µÄ²âÊÔÒÑÍê³É¡£ |