{"id":3911,"date":"2019-04-26T10:54:26","date_gmt":"2019-04-26T02:54:26","guid":{"rendered":"http:\/\/switch.linesno.com\/?p=3911"},"modified":"2019-04-26T10:54:26","modified_gmt":"2019-04-26T02:54:26","slug":"spring-boot-with-elkelasticsearch-logstash-kibana","status":"publish","type":"post","link":"http:\/\/switch.linesno.com\/?p=3911","title":{"rendered":"Spring boot with ELK(Elasticsearch + Logstash + Kibana)"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">5.31. Spring boot with ELK(Elasticsearch + Logstash + Kibana)<\/h2>\n\n\n\n<p>\u5c06 Spring boot \u65e5\u5fd7\u5199\u5165 ELK \u6709\u591a\u79cd\u5b9e\u73b0\u65b9\u5f0f\uff0c\u8fd9\u91cc\u4ec5\u63d0\u4f9b\u4e09\u79cd\u65b9\u6848\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Spring boot -&gt; logback -&gt; Tcp\/IP -&gt; logstash -&gt; elasticsearch\n\u8fd9\u79cd\u65b9\u5f0f\u5b9e\u73b0\u975e\u5e38\u65b9\u4fbf\u4e0d\u9700\u8981\u800c\u5916\u5305\u6216\u8005\u8f6f\u4ef6<\/li><li>Spring boot -&gt; logback -&gt; Redis -&gt; logstash -&gt; elasticsearch\n\u5229\u7528 Redis \u63d0\u4f9b\u7684\u53d1\u5e03\u8ba2\u9605\u529f\u80fd\u5c06\u65e5\u5fd7\u6295\u9012\u5230 elasticsearch<\/li><li>Spring boot -&gt; logback -&gt; Kafka -&gt; logstash -&gt; elasticsearch\nKafka \u65b9\u6cd5\u9002\u5408\u5927\u6570\u636e\u7684\u60c5\u51b5\u3002<\/li><\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">5.31.1. TCP \u65b9\u6848<\/h3>\n\n\n\n<p>logstash \u914d\u7f6e<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\t\t\tinput {\n  tcp {\n    host =&gt; \"172.16.1.16\" \n    port =&gt; 9250\n    mode =&gt; \"server\"\n    tags =&gt; [\"tags\"]\n    codec =&gt; json_lines  \/\/\u53ef\u80fd\u9700\u8981\u66f4\u65b0logstash\u63d2\u4ef6\n  }\n}\n\noutput {\n stdout{codec =&gt;rubydebug}\n  elasticsearch {\n   hosts =&gt; [\"localhost:9200\"]  \/\/\u8fd9\u5757\u914d\u7f6e\u9700\u8981\u5e26\u7aef\u53e3\u53f7\n    flush_size =&gt; 1000\n\n  }\n}\t\t\t<\/pre>\n\n\n\n<p>Spring boot logback.xml \u914d\u7f6e<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\t\t\t&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;configuration&gt;\n    &lt;property resource=\"properties\/logback-variables.properties\" \/&gt; \n\n    &lt;appender name=\"STDOUT\" class=\"ch.qos.logback.core.ConsoleAppender\"&gt;\n        &lt;encoder charset=\"UTF-8\"&gt;\n            &lt;pattern&gt;%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n\n            &lt;\/pattern&gt;\n        &lt;\/encoder&gt;\n    &lt;\/appender&gt;\n    &lt;appender name=\"LOGSTASH\" class=\"net.logstash.logback.appender.LogstashTcpSocketAppender\"&gt;\n        &lt;destination&gt;172.16.1.16:9250&lt;\/destination&gt;\n        &lt;encoder charset=\"UTF-8\" class=\"net.logstash.logback.encoder.LogstashEncoder\" \/&gt;\n    &lt;\/appender&gt;\n\n    &lt;!--&lt;appender name=\"async\" class=\"ch.qos.logback.classic.AsyncAppender\"&gt;--&gt;\n        &lt;!--&lt;appender-ref ref=\"stash\" \/&gt;--&gt;\n    &lt;!--&lt;\/appender&gt;--&gt;\n    \n    &lt;root level=\"info\"&gt;                    &lt;!-- \u8bbe\u7f6e\u65e5\u5fd7\u7ea7\u522b --&gt;\n        &lt;appender-ref ref=\"STDOUT\" \/&gt;\n        &lt;appender-ref ref=\"LOGSTASH\" \/&gt;\n    &lt;\/root&gt;\n&lt;\/configuration&gt;\t\t\t<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5.31.2. Redis \u65b9\u6848<\/h3>\n\n\n\n<p>Maven pom.xml \u589e\u52a0 Logback Redis \u4f9d\u8d56<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\t\t\t&lt;!-- https:\/\/mvnrepository.com\/artifact\/com.cwbase\/logback-redis-appender --&gt;\n&lt;dependency&gt;\n    &lt;groupId&gt;com.cwbase&lt;\/groupId&gt;\n    &lt;artifactId&gt;logback-redis-appender&lt;\/artifactId&gt;\n    &lt;version&gt;1.1.5&lt;\/version&gt;\n&lt;\/dependency&gt;\t\t\t<\/pre>\n\n\n\n<p>Spring boot logback.xml \u914d\u7f6e<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\t\t\t&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;configuration&gt;\n\t&lt;include resource=\"org\/springframework\/boot\/logging\/logback\/defaults.xml\" \/&gt;\n\t&lt;include resource=\"org\/springframework\/boot\/logging\/logback\/file-appender.xml\" \/&gt;\n\t&lt;property name=\"type.name\" value=\"test\" \/&gt;\n\t&lt;appender name=\"LOGSTASH\" class=\"com.cwbase.logback.RedisAppender\"&gt;\n\t\t&lt;source&gt;spring-application&lt;\/source&gt;\n\t\t&lt;type&gt;${type.name}&lt;\/type&gt;\n\t\t&lt;host&gt;localhost&lt;\/host&gt;\n\t\t&lt;key&gt;logstash:redis&lt;\/key&gt;\n\t\t&lt;tags&gt;test-2&lt;\/tags&gt;\n\t\t&lt;mdc&gt;true&lt;\/mdc&gt;\n\t\t&lt;location&gt;true&lt;\/location&gt;\n\t\t&lt;callerStackIndex&gt;0&lt;\/callerStackIndex&gt;\n\t\t&lt;!--additionalField\u6dfb\u52a0\u9644\u52a0\u5b57\u6bb5 \u7528\u4e8ehead\u63d2\u4ef6\u663e\u793a --&gt;\n\t\t&lt;additionalField&gt;\n\t\t\t&lt;key&gt;MyKey&lt;\/key&gt;\n\t\t\t&lt;value&gt;MyValue&lt;\/value&gt;\n\t\t&lt;\/additionalField&gt;\n\t\t&lt;additionalField&gt;\n\t\t\t&lt;key&gt;MySecondKey&lt;\/key&gt;\n\t\t\t&lt;value&gt;MyOtherValue&lt;\/value&gt;\n\t\t&lt;\/additionalField&gt;\n\t&lt;\/appender&gt;\n\t&lt;root level=\"INFO\"&gt;\n\t\t&lt;appender-ref ref=\"FILE\" \/&gt;\n\t\t&lt;appender-ref ref=\"LOGSTASH\" \/&gt;\n\t&lt;\/root&gt;\n&lt;\/configuration&gt;\t\t\t<\/pre>\n\n\n\n<p>logstash \u914d\u7f6e<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\t\t\tinput {\n    redis {\n        host =&gt; 'localhost'\n        data_type =&gt; 'list'\n        port =&gt; \"6379\"\n        key =&gt; 'logstash:redis' #\u81ea\u5b9a\u4e49\n        type =&gt; 'redis-input'   #\u81ea\u5b9a\u4e49\n    }\n}\noutput {\n    elasticsearch {\n        host =&gt; \"localhost\" \n        codec =&gt; \"json\"\n        protocol =&gt; \"http\"\n    }\n}\t\t\t<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5.31.3. Kafka \u65b9\u6848<\/h3>\n\n\n\n<p>\u6682\u65f6\u6ca1\u6709\u673a\u5668\u8d44\u6e90\uff0c\u672c\u7ae0\u8282\u5f85\u7eed<\/p>\n","protected":false},"excerpt":{"rendered":"<p>5.31. Spring boot with ELK(Elasticsearch + Logstash + K [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-3911","post","type-post","status-publish","format-standard","hentry","category-day"],"_links":{"self":[{"href":"http:\/\/switch.linesno.com\/index.php?rest_route=\/wp\/v2\/posts\/3911","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/switch.linesno.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/switch.linesno.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/switch.linesno.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/switch.linesno.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3911"}],"version-history":[{"count":1,"href":"http:\/\/switch.linesno.com\/index.php?rest_route=\/wp\/v2\/posts\/3911\/revisions"}],"predecessor-version":[{"id":3912,"href":"http:\/\/switch.linesno.com\/index.php?rest_route=\/wp\/v2\/posts\/3911\/revisions\/3912"}],"wp:attachment":[{"href":"http:\/\/switch.linesno.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3911"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/switch.linesno.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3911"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/switch.linesno.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3911"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}