{"id":498,"date":"2026-01-27T02:17:29","date_gmt":"2026-01-27T02:17:29","guid":{"rendered":"https:\/\/blog.gpst.net.cn:4008\/?p=498"},"modified":"2026-01-28T06:24:12","modified_gmt":"2026-01-28T06:24:12","slug":"elkredislogback%e5%ae%9e%e6%97%b6%e6%94%b6%e9%9b%86%e5%be%ae%e6%9c%8d%e5%8a%a1%e6%97%a5%e5%bf%97","status":"publish","type":"post","link":"https:\/\/opshub.com.cn\/?p=498","title":{"rendered":"ELK+Redis+Logback\u5b9e\u65f6\u6536\u96c6\u5fae\u670d\u52a1\u65e5\u5fd7"},"content":{"rendered":"\n<p>\u4e00\u3001\u5b89\u88c5elasticsearch<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sysctl -w vm.max_map_count=262144\nmkdir -p \/opt\/elk\/elastic<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run --name=elasticsearch \\\n        --env=TZ=Asia\/Shanghai \\\n        --env='ES_JAVA_OPTS=-Xms1024m -Xmx1024m' \\\n        --volume=\/opt\/elk\/elastic\/elasticsearch.yml:\/usr\/share\/elasticsearch\/config\/elasticsearch.yml \\\n        --volume=\/opt\/elk\/elastic\/plugins:\/usr\/share\/elasticsearch\/plugins \\\n        --volume=\/opt\/elk\/elastic\/data:\/usr\/share\/elasticsearch\/data \\\n        --volume=\/opt\/elk\/elastic\/logs:\/usr\/share\/elasticsearch\/logs \\\n        --privileged \\\n        --workdir=\/usr\/share\/elasticsearch \\\n        -p 9200:9200 \\\n        -p 9300:9300 \\\n        --restart=always \\\n        --runtime=runc \\\n        --detach=true \\\n        -t \\\n        elasticsearch:7.17.17 \\\n        eswrapper<\/code><\/pre>\n\n\n\n<p>elasticsearch.yml\u5185\u5bb9\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cluster.name: \"docker-cluster\"\nnetwork.host: 0.0.0.0\n# \u8bbf\u95eeID\u9650\u5b9a\uff0c0.0.0.0\u4e3a\u4e0d\u9650\u5236\uff0c\u751f\u4ea7\u73af\u5883\u8bf7\u8bbe\u7f6e\u4e3a\u56fa\u5b9aIP\ntransport.host: 0.0.0.0\n# elasticsearch\u8282\u70b9\u540d\u79f0\nnode.name: node-1\n# elasticsearch\u8282\u70b9\u4fe1\u606f\ncluster.initial_master_nodes: &#091;\"node-1\"]\n# \u4e0b\u9762\u7684\u914d\u7f6e\u662f\u5173\u95ed\u8de8\u57df\u9a8c\u8bc1\nhttp.cors.enabled: true\nhttp.cors.allow-origin: \"*\"<\/code><\/pre>\n\n\n\n<p>\u4e8c\u3001\u5b89\u88c5kibana<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p \/opt\/elk\/kibana\ndocker run --name=kibana \\\n        --user=kibana \\\n        --volume=\/opt\/elk\/kibana\/kibana.yml:\/usr\/share\/kibana\/config\/kibana.yml \\\n        --workdir=\/usr\/share\/kibana \\\n        -p 5601:5601 \\\n        --restart=no \\\n        --runtime=runc \\\n        --detach=true \\\n        -t \\\n        kibana:7.17.17 \\\n        \/usr\/local\/bin\/kibana-docker<\/code><\/pre>\n\n\n\n<p>kibana.yml\u5185\u5bb9\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>server.port: 5601\nserver.host: \"0.0.0.0\"\nelasticsearch.hosts: &#091;\"http:\/\/192.168.3.9:9200\"]\n# \u64cd\u4f5c\u754c\u9762\u8bed\u8a00\u8bbe\u7f6e\ni18n.locale: \"zh-CN\"<\/code><\/pre>\n\n\n\n<p>\u4e09\u3001\u5b89\u88c5redis<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p \/opt\/elk\/redis\ndocker run --name=redis \\\n        --volume=\/opt\/elk\/redis\/redis.conf:\/etc\/redis\/redis.conf:rw \\\n        --volume=\/etc\/localtime:\/etc\/localtime:ro \\\n        --volume=\/opt\/elk\/redis\/data:\/data:rw \\\n        --workdir=\/data \\\n        -p 6379:6379 \\\n        --restart=unless-stopped \\\n        --runtime=runc \\\n        --detach=true \\\n        -t \\\n        redis:7.2.4 \\\n        redis-server \/etc\/redis\/redis.conf<\/code><\/pre>\n\n\n\n<p>redis.conf\u5185\u5bb9\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>port 6379\nrequirepass Ptl3BKCbMZ<\/code><\/pre>\n\n\n\n<p>\u56db\u3001\u5b89\u88c5logstatsh<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p \/opt\/elk\/logstash\/{logs,pathdata1,pathdata2}<\/code><\/pre>\n\n\n\n<p>\u4e0b\u8f7dlogstash\uff0c\u7248\u672c\uff1a7.17.17<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wget https:\/\/artifacts.elastic.co\/downloads\/logstash\/logstash-7.17.17-linux-x86_64.tar.gz<\/code><\/pre>\n\n\n\n<p>\u89e3\u538b\u540e\u653e\u5728\/opt\/elk\/logstash\u4e0b\uff0c\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PATH=\/opt\/elk\/logstash\/logstash-7.17.7\/bin:$PATH\nexport PATH<\/code><\/pre>\n\n\n\n<p>\u8bbe\u7f6eto-redis.conf (logstash\u6536\u96c6\u65e5\u5fd7\u5e76\u628a\u65e5\u5fd7\u8f6c\u50a8\u5230redis)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>input {\n    tcp {\n        port =&gt; 9092\n        type =&gt; \"log-ruoyi-gateway\"\n    }\n    tcp {\n        port =&gt; 9093\n        type =&gt; \"log-ruoyi-auth\"\n    }\n    tcp {\n        port =&gt; 9094\n        type =&gt; \"log-ruoyi-system\"\n    }\n    tcp {\n        port =&gt; 9095\n        type =&gt; \"log-ruoyi-file\"\n    }\n    tcp {\n        port =&gt; 9096\n        type =&gt; \"log-ruoyi-job\"\n    }\n    tcp {\n        port =&gt; 9097\n        type =&gt; \"log-ruoyi-gen\"\n    }\n    tcp {\n        port =&gt; 9098\n        type =&gt; \"log-ruoyi-business\"\n    }\n}\n\n\n\n\nfilter {\n    json {\n        source =&gt; \"message\"\n    }\n}\noutput {\n    if &#091;type] == \"log-ruoyi-gateway\" {\n        redis {\n            host =&gt; \"192.168.3.9\"\n            port =&gt; \"6379\"\n            key =&gt; \"log-ruoyi-gateway\"\n            data_type =&gt; \"list\"\n            codec =&gt; \"json\"\n            password =&gt; \"Ptl3BKCbMZ\"\n            db =&gt; \"0\"\n         }\n     }\n    if &#091;type] == \"log-ruoyi-auth\" {\n        redis {\n            host =&gt; \"192.168.3.9\"\n            port =&gt; \"6379\"\n            key =&gt; \"log-ruoyi-auth\"\n            data_type =&gt; \"list\"\n            codec =&gt; \"json\"\n            password =&gt; \"Ptl3BKCbMZ\"\n            db =&gt; \"0\"\n         }\n     }\n    if &#091;type] == \"log-ruoyi-system\" {\n        redis {\n            host =&gt; \"192.168.3.9\"\n            port =&gt; \"6379\"\n            key =&gt; \"log-ruoyi-system\"\n            data_type =&gt; \"list\"\n            codec =&gt; \"json\"\n            password =&gt; \"Ptl3BKCbMZ\"\n            db =&gt; \"0\"\n         }\n     }\n    if &#091;type] == \"log-ruoyi-file\" {\n        redis {\n            host =&gt; \"192.168.3.9\"\n            port =&gt; \"6379\"\n            key =&gt; \"log-ruoyi-file\"\n            data_type =&gt; \"list\"\n            codec =&gt; \"json\"\n            password =&gt; \"Ptl3BKCbMZ\"\n            db =&gt; \"0\"\n         }\n     }\n    if &#091;type] == \"log-ruoyi-job\" {\n        redis {\n            host =&gt; \"192.168.3.9\"\n            port =&gt; \"6379\"\n            key =&gt; \"log-ruoyi-job\"\n            data_type =&gt; \"list\"\n            codec =&gt; \"json\"\n            password =&gt; \"Ptl3BKCbMZ\"\n            db =&gt; \"0\"\n         }\n     }\n    if &#091;type] == \"log-ruoyi-gen\" {\n        redis {\n            host =&gt; \"192.168.3.9\"\n            port =&gt; \"6379\"\n            key =&gt; \"log-ruoyi-gen\"\n            data_type =&gt; \"list\"\n            codec =&gt; \"json\"\n            password =&gt; \"Ptl3BKCbMZ\"\n            db =&gt; \"0\"\n         }\n     }\n    if &#091;type] == \"log-ruoyi-business\" {\n        redis {\n            host =&gt; \"192.168.3.9\"\n            port =&gt; \"6379\"\n            key =&gt; \"log-ruoyi-business\"\n            data_type =&gt; \"list\"\n            codec =&gt; \"json\"\n            password =&gt; \"Ptl3BKCbMZ\"\n            db =&gt; \"0\"\n         }\n     }\n}<\/code><\/pre>\n\n\n\n<p>\u8bbe\u7f6eredis-to.conf (logstash\u8bfb\u53d6redis\u91cc\u7684\u65e5\u5fd7\uff0c\u5e76\u5c06\u65e5\u5fd7\u63d2\u5165\u5230elasticsearch\u4e2d\uff0credis\u8d77\u4e86MQ\u6d88\u606f\u961f\u5217\u7684\u4f5c\u7528\uff0c\u6d88\u606f\u88ab\u53d6\u8d70\u540e\uff0c\u81ea\u52a8\u6e05\u9664\u6d88\u606f\uff1b\u6709\u4e86redis\u505aMQ\uff0c\u9632\u6b62es\u6302\u4e86\u4e22\u5931\u6d88\u606f\uff0c\u5e76\u4e14\u53ef\u4ee5\u51cf\u7f13es\u6536\u5230\u7684\u538b\u529b)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>input{\n        redis{\n                data_type=&gt;\"list\"\n                host=&gt;\"192.168.3.9\"\n                port=&gt;\"6379\"\n                db=&gt;\"0\"\n                key=&gt;\"log-ruoyi-gateway\"\n                codec=&gt;\"json\"\n                password=&gt;\"Ptl3BKCbMZ\"\n                type=&gt;\"log-ruoyi-gateway\"\n\n\n\n\n        }\n        redis{\n                data_type=&gt;\"list\"\n                host=&gt;\"192.168.3.9\"\n                port=&gt;\"6379\"\n                db=&gt;\"0\"\n                key=&gt;\"log-ruoyi-auth\"\n                codec=&gt;\"json\"\n                password=&gt;\"Ptl3BKCbMZ\"\n                type=&gt;\"log-ruoyi-auth\"\n\n\n\n\n        }\n        redis{\n                data_type=&gt;\"list\"\n                host=&gt;\"192.168.3.9\"\n                port=&gt;\"6379\"\n                db=&gt;\"0\"\n                key=&gt;\"log-ruoyi-system\"\n                codec=&gt;\"json\"\n                password=&gt;\"Ptl3BKCbMZ\"\n                type=&gt;\"log-ruoyi-system\"\n\n\n\n\n        }\n        redis{\n                data_type=&gt;\"list\"\n                host=&gt;\"192.168.3.9\"\n                port=&gt;\"6379\"\n                db=&gt;\"0\"\n                key=&gt;\"log-ruoyi-file\"\n                codec=&gt;\"json\"\n                password=&gt;\"Ptl3BKCbMZ\"\n                type=&gt;\"log-ruoyi-file\"\n\n\n\n\n        }\n        redis{\n                data_type=&gt;\"list\"\n                host=&gt;\"192.168.3.9\"\n                port=&gt;\"6379\"\n                db=&gt;\"0\"\n                key=&gt;\"log-ruoyi-job\"\n                codec=&gt;\"json\"\n                password=&gt;\"Ptl3BKCbMZ\"\n                type=&gt;\"log-ruoyi-job\"\n\n\n\n\n        }\n        redis{\n                data_type=&gt;\"list\"\n                host=&gt;\"192.168.3.9\"\n                port=&gt;\"6379\"\n                db=&gt;\"0\"\n                key=&gt;\"log-ruoyi-gen\"\n                codec=&gt;\"json\"\n                password=&gt;\"Ptl3BKCbMZ\"\n                type=&gt;\"log-ruoyi-gen\"\n\n\n\n\n        }\n        redis{\n                data_type=&gt;\"list\"\n                host=&gt;\"192.168.3.9\"\n                port=&gt;\"6379\"\n                db=&gt;\"0\"\n                key=&gt;\"log-ruoyi-business\"\n                codec=&gt;\"json\"\n                password=&gt;\"Ptl3BKCbMZ\"\n                type=&gt;\"log-ruoyi-business\"\n\n\n\n\n        }\n}\noutput{\n        if &#091;type] == \"log-ruoyi-gateway\" {\n            elasticsearch{\n                hosts=&gt;&#091;\"192.168.3.9:9200\"]\n                index=&gt;\"nk-gateway-%{+YYYY.MM.dd}\"\n            }\n        }\n\n\n\n\n        if &#091;type] == \"log-ruoyi-auth\" {\n            elasticsearch{\n                hosts=&gt;&#091;\"192.168.3.9:9200\"]\n                index=&gt;\"nk-auth-%{+YYYY.MM.dd}\"\n            }\n        }\n\n\n\n\n        if &#091;type] == \"log-ruoyi-system\" {\n            elasticsearch{\n                hosts=&gt;&#091;\"192.168.3.9:9200\"]\n                index=&gt;\"nk-system-%{+YYYY.MM.dd}\"\n            }\n        }\n\n\n\n\n        if &#091;type] == \"log-ruoyi-file\" {\n            elasticsearch{\n                hosts=&gt;&#091;\"192.168.3.9:9200\"]\n                index=&gt;\"nk-file-%{+YYYY.MM.dd}\"\n            }\n        }\n\n\n\n\n        if &#091;type] == \"log-ruoyi-job\" {\n            elasticsearch{\n                hosts=&gt;&#091;\"192.168.3.9:9200\"]\n                index=&gt;\"nk-job-%{+YYYY.MM.dd}\"\n            }\n        }\n\n\n\n\n        if &#091;type] == \"log-ruoyi-gen\" {\n            elasticsearch{\n                hosts=&gt;&#091;\"192.168.3.9:9200\"]\n                index=&gt;\"nk-gen-%{+YYYY.MM.dd}\"\n            }\n        }\n\n\n\n\n        if &#091;type] == \"log-ruoyi-business\" {\n            elasticsearch{\n                hosts=&gt;&#091;\"192.168.3.9:9200\"]\n                index=&gt;\"nk-business-%{+YYYY.MM.dd}\"\n            }\n        }\n\n\n\n\n}<\/code><\/pre>\n\n\n\n<p>\u68c0\u6d4blogstatsh\u914d\u7f6e\u6587\u4ef6\u7684\u8bed\u6cd5\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>logstash -f .\/to-redis.conf -t\nlogstash -f .\/redis-to.conf -t<\/code><\/pre>\n\n\n\n<p>\u542f\u52a8logstatsh\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nohup logstash -f \/opt\/elk\/logstash\/to-redis.conf --path.data=\/opt\/elk\/logstash\/pathdata1 &amp;&gt;\/opt\/elk\/logstash\/logs\/to_redis.log &amp;\nnohup logstash -f \/opt\/elk\/logstash\/redis-to.conf --path.data=\/opt\/elk\/logstash\/pathdata2 &amp;&gt;\/opt\/elk\/logstash\/logs\/redis-to.log &amp;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u914d\u7f6elogback<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">\u5f15\u8d77\u4f9d\u8d56<\/h4>\n\n\n\n<p>springboot\u5df2\u7ecf\u9ed8\u8ba4\u96c6\u6210\u4e86logback\u6846\u67b6\uff0c\u6240\u4ee5\u65e0\u9700\u5728\u5f15\u5165logback\u4e86\uff0c\u4ee5\u4e0b\u4f9d\u8d56\u662flogback\u548clogstash\u901a\u8baf\u6240\u9700\u7684\u4f9d\u8d56<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;dependency&gt;\n            &lt;groupId&gt;net.logstash.logback&lt;\/groupId&gt;\n            &lt;artifactId&gt;logstash-logback-encoder&lt;\/artifactId&gt;\n            &lt;version&gt;6.3&lt;\/version&gt;\n  &lt;\/dependency&gt;<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\u914d\u7f6e\u6587\u4ef6<\/h4>\n\n\n\n<p>yml\u914d\u7f6e\u6587\u4ef6\u4e2d\u52a0\u4e0a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>logging:\n  config: classpath:log\/logback-spring.xml<\/code><\/pre>\n\n\n\n<p>\u5728resource\u4e2d\u52a0\u4e0alog\/logback-spring.xml\u914d\u7f6e\u6587\u4ef6<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"483\" height=\"123\" src=\"https:\/\/opshub.com.cn\/wp-content\/uploads\/2026\/01\/Image-112.png\" alt=\"\" class=\"wp-image-500\" srcset=\"https:\/\/opshub.com.cn\/wp-content\/uploads\/2026\/01\/Image-112.png 483w, https:\/\/opshub.com.cn\/wp-content\/uploads\/2026\/01\/Image-112-300x76.png 300w\" sizes=\"auto, (max-width: 483px) 100vw, 483px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;!-- \u65e5\u5fd7\u7ea7\u522b\u4ece\u4f4e\u5230\u9ad8\u5206\u4e3aTRACE &lt; DEBUG &lt; INFO &lt; WARN &lt; ERROR &lt; FATAL\uff0c\u5982\u679c\u8bbe\u7f6e\u4e3aWARN\uff0c\u5219\u4f4e\u4e8eWARN\u7684\u4fe1\u606f\u90fd\u4e0d\u4f1a\u8f93\u51fa --&gt;\n&lt;!-- scan:\u5f53\u6b64\u5c5e\u6027\u8bbe\u7f6e\u4e3atrue\u65f6\uff0c\u914d\u7f6e\u6587\u4ef6\u5982\u679c\u53d1\u751f\u6539\u53d8\uff0c\u5c06\u4f1a\u88ab\u91cd\u65b0\u52a0\u8f7d\uff0c\u9ed8\u8ba4\u503c\u4e3atrue --&gt;\n&lt;!-- scanPeriod:\u8bbe\u7f6e\u76d1\u6d4b\u914d\u7f6e\u6587\u4ef6\u662f\u5426\u6709\u4fee\u6539\u7684\u65f6\u95f4\u95f4\u9694\uff0c\u5982\u679c\u6ca1\u6709\u7ed9\u51fa\u65f6\u95f4\u5355\u4f4d\uff0c\u9ed8\u8ba4\u5355\u4f4d\u662f\u6beb\u79d2\u3002\u5f53scan\u4e3atrue\u65f6\uff0c\u6b64\u5c5e\u6027\u751f\u6548\u3002\u9ed8\u8ba4\u7684\u65f6\u95f4\u95f4\u9694\u4e3a1\u5206\u949f\u3002 --&gt;\n&lt;!-- debug:\u5f53\u6b64\u5c5e\u6027\u8bbe\u7f6e\u4e3atrue\u65f6\uff0c\u5c06\u6253\u5370\u51falogback\u5185\u90e8\u65e5\u5fd7\u4fe1\u606f\uff0c\u5b9e\u65f6\u67e5\u770blogback\u8fd0\u884c\u72b6\u6001\u3002\u9ed8\u8ba4\u503c\u4e3afalse\u3002 --&gt;\n&lt;configuration scan=\"true\" scanPeriod=\"10 seconds\"&gt;\n    &lt;!--&lt;include resource=\"org\/springframework\/boot\/logging\/logback\/base.xml\"\n        \/&gt; --&gt;\n    &lt;contextName&gt;Logback For Boss&lt;\/contextName&gt;\n    &lt;!-- name\u7684\u503c\u662f\u53d8\u91cf\u7684\u540d\u79f0\uff0cvalue\u7684\u503c\u65f6\u53d8\u91cf\u5b9a\u4e49\u7684\u503c\u3002\u901a\u8fc7\u5b9a\u4e49\u7684\u503c\u4f1a\u88ab\u63d2\u5165\u5230logger\u4e0a\u4e0b\u6587\u4e2d\u3002\u5b9a\u4e49\u53d8\u91cf\u540e\uff0c\u53ef\u4ee5\u4f7f\u201c${}\u201d\u6765\u4f7f\u7528\u53d8\u91cf\u3002 --&gt;\n    &lt;property name=\"log.path\" value=\".\/logs\/hlwserver\/path\" \/&gt;\n    &lt;!-- \u5b9a\u4e49\u65e5\u5fd7\u6587\u4ef6 \u8f93\u5165\u4f4d\u7f6e --&gt;\n    &lt;property name=\"logDir\" value=\".\/logs\/hlwserver\/\" \/&gt;\n    &lt;!-- \u65e5\u5fd7\u6700\u5927\u7684\u5386\u53f2 30\u5929 --&gt;\n    &lt;property name=\"maxHistory\" value=\"30\" \/&gt;\n\n\n\n\n    &lt;!-- logstash\u8fdc\u7a0b\u65e5\u5fd7\u914d\u7f6e--&gt;\n    &lt;appender name=\"logstash\" class=\"net.logstash.logback.appender.LogstashTcpSocketAppender\"&gt;\n        &lt;destination&gt;192.168.5.188:9092&lt;\/destination&gt;\n        &lt;encoder charset=\"UTF-8\" class=\"net.logstash.logback.encoder.LogstashEncoder\"\/&gt;\n    &lt;\/appender&gt;\n\n\n\n\n    &lt;!-- \u63a7\u5236\u53f0\u8f93\u51fa\u65e5\u5fd7 --&gt;\n    &lt;appender name=\"STDOUT\" class=\"ch.qos.logback.core.ConsoleAppender\"&gt;\n        &lt;encoder&gt;\n            &lt;pattern&gt;%cyan(%d{yyyy-MM-dd HH:mm:ss.SSS}) &#091;%thread] %highlight(%-5level) %logger{36} - %msg%n&lt;\/pattern&gt;\n            &lt;charset class=\"java.nio.charset.Charset\"&gt;UTF-8&lt;\/charset&gt;\n        &lt;\/encoder&gt;\n    &lt;\/appender&gt;\n\n\n\n\n    &lt;!-- ERROR\u7ea7\u522b\u5355\u72ec\u8f93\u51fa\u7684\u65e5\u5fd7 --&gt;\n    &lt;appender name=\"ERROR\"\n              class=\"ch.qos.logback.core.rolling.RollingFileAppender\"&gt;\n        &lt;filter class=\"ch.qos.logback.classic.filter.LevelFilter\"&gt;\n            &lt;level&gt;ERROR&lt;\/level&gt;\n            &lt;onMatch&gt;ACCEPT&lt;\/onMatch&gt;\n            &lt;onMismatch&gt;DENY&lt;\/onMismatch&gt;\n        &lt;\/filter&gt;\n        &lt;rollingPolicy\n                class=\"ch.qos.logback.core.rolling.TimeBasedRollingPolicy\"&gt;\n            &lt;fileNamePattern&gt;${logDir}\\%d{yyyyMMdd}\\error.log&lt;\/fileNamePattern&gt;\n            &lt;maxHistory&gt;${maxHistory}&lt;\/maxHistory&gt;\n        &lt;\/rollingPolicy&gt;\n        &lt;encoder&gt;\n            &lt;pattern&gt;%d{yyyy-MM-dd HH:mm:ss.SSS} &#091;%thread] %-5level %logger -\n                %msg%n&lt;\/pattern&gt;\n            &lt;charset class=\"java.nio.charset.Charset\"&gt;UTF-8&lt;\/charset&gt;\n        &lt;\/encoder&gt;\n        &lt;append&gt;true&lt;\/append&gt;\n        &lt;prudent&gt;false&lt;\/prudent&gt;\n    &lt;\/appender&gt;\n\n\n\n\n    &lt;!-- \u6240\u6709\u7ea7\u522b\u65e5\u5fd7\u7684\u6587\u4ef6\u8f93\u51fa --&gt;\n    &lt;appender name=\"ALL_LOGS\"\n              class=\"ch.qos.logback.core.rolling.RollingFileAppender\"&gt;\n        &lt;rollingPolicy\n                class=\"ch.qos.logback.core.rolling.TimeBasedRollingPolicy\"&gt;\n            &lt;fileNamePattern&gt;${logDir}\\%d{yyyyMMdd}\\info.log&lt;\/fileNamePattern&gt;\n            &lt;maxHistory&gt;${maxHistory}&lt;\/maxHistory&gt;\n        &lt;\/rollingPolicy&gt;\n        &lt;encoder&gt;\n            &lt;pattern&gt;%d{yyyy-MM-dd HH:mm:ss.SSS} &#091;%thread] %-5level %logger -\n                %msg%n&lt;\/pattern&gt;\n            &lt;charset class=\"java.nio.charset.Charset\"&gt;UTF-8&lt;\/charset&gt;\n        &lt;\/encoder&gt;\n        &lt;append&gt;false&lt;\/append&gt;\n        &lt;prudent&gt;false&lt;\/prudent&gt;\n    &lt;\/appender&gt;\n\n\n\n\n    &lt;!--\u6587\u4ef6\u65e5\u5fd7\uff0c \u6309\u7167\u6bcf\u5929\u751f\u6210\u65e5\u5fd7\u6587\u4ef6 --&gt;\n    &lt;appender name=\"FILE\" class=\"ch.qos.logback.core.rolling.RollingFileAppender\"&gt;\n        &lt;rollingPolicy class=\"ch.qos.logback.core.rolling.TimeBasedRollingPolicy\"&gt;\n            &lt;!--\u65e5\u5fd7\u6587\u4ef6\u8f93\u51fa\u7684\u6587\u4ef6\u540d--&gt;\n            &lt;FileNamePattern&gt;${logDir}\/%d{yyyyMMdd}\/boss.%d{yyyy-MM-dd}.log&lt;\/FileNamePattern&gt;\n            &lt;!--\u65e5\u5fd7\u6587\u4ef6\u4fdd\u7559\u5929\u6570--&gt;\n            &lt;MaxHistory&gt;30&lt;\/MaxHistory&gt;\n        &lt;\/rollingPolicy&gt;\n        &lt;encoder class=\"ch.qos.logback.classic.encoder.PatternLayoutEncoder\"&gt;\n            &lt;!--\u683c\u5f0f\u5316\u8f93\u51fa\uff1a%d\u8868\u793a\u65e5\u671f\uff0c%thread\u8868\u793a\u7ebf\u7a0b\u540d\uff0c%-5level\uff1a\u7ea7\u522b\u4ece\u5de6\u663e\u793a5\u4e2a\u5b57\u7b26\u5bbd\u5ea6%msg\uff1a\u65e5\u5fd7\u6d88\u606f\uff0c%n\u662f\u6362\u884c\u7b26--&gt;\n            &lt;pattern&gt;%d{yyyy-MM-dd HH:mm:ss.SSS} &#091;%thread] %-5level %logger{50} - %msg%n&lt;\/pattern&gt;\n        &lt;\/encoder&gt;\n        &lt;!--\u65e5\u5fd7\u6587\u4ef6\u6700\u5927\u7684\u5927\u5c0f--&gt;\n        &lt;triggeringPolicy class=\"ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy\"&gt;\n            &lt;MaxFileSize&gt;10MB&lt;\/MaxFileSize&gt;\n        &lt;\/triggeringPolicy&gt;\n    &lt;\/appender&gt;\n\n\n\n\n    &lt;!-- \u5f02\u6b65\u8f93\u51fa --&gt;\n    &lt;appender name=\"dayLogAsyncAppender\" class=\"ch.qos.logback.classic.AsyncAppender\"&gt;\n        &lt;includeCallerData&gt;true&lt;\/includeCallerData&gt;\n        &lt;!-- \u4e0d\u4e22\u5931\u65e5\u5fd7.\u9ed8\u8ba4\u7684,\u5982\u679c\u961f\u5217\u768480%\u5df2\u6ee1,\u5219\u4f1a\u4e22\u5f03TRACT\u3001DEBUG\u3001INFO\u7ea7\u522b\u7684\u65e5\u5fd7 --&gt;\n        &lt;discardingThreshold&gt;0&lt;\/discardingThreshold&gt;\n        &lt;!-- \u66f4\u6539\u9ed8\u8ba4\u7684\u961f\u5217\u7684\u6df1\u5ea6,\u8be5\u503c\u4f1a\u5f71\u54cd\u6027\u80fd.\u9ed8\u8ba4\u503c\u4e3a256 --&gt;\n        &lt;queueSize&gt;512&lt;\/queueSize&gt;\n        &lt;appender-ref ref=\"FILE\"\/&gt;\n    &lt;\/appender&gt;\n\n\n\n\n    &lt;!--\u4e13\u4e3a spring \u5b9a\u5236\n     --&gt;\n    &lt;logger name=\"org.springframework\" level=\"info\"\/&gt;\n    &lt;!-- show parameters for hibernate sql \u4e13\u4e3a Hibernate \u5b9a\u5236 --&gt;\n    &lt;logger name=\"org.hibernate.type.descriptor.sql.BasicBinder\" level=\"TRACE\" \/&gt;\n    &lt;logger name=\"org.hibernate.type.descriptor.sql.BasicExtractor\" level=\"DEBUG\" \/&gt;\n    &lt;logger name=\"org.hibernate.SQL\" level=\"DEBUG\" \/&gt;\n    &lt;logger name=\"org.hibernate.engine.QueryParameters\" level=\"DEBUG\" \/&gt;\n    &lt;logger name=\"org.hibernate.engine.query.HQLQueryPlan\" level=\"DEBUG\" \/&gt;\n\n\n\n\n    &lt;!-- root\u7ea7\u522b DEBUG --&gt;\n    &lt;root level=\"INFO\"&gt;\n        &lt;!-- \u63a7\u5236\u53f0\u8f93\u51fa --&gt;\n        &lt;appender-ref ref=\"STDOUT\" \/&gt;\n        &lt;!-- \u6587\u4ef6\u8f93\u51fa --&gt;\n        &lt;appender-ref ref=\"ERROR\" \/&gt;\n        &lt;appender-ref ref=\"ALL_LOGS\" \/&gt;\n        &lt;appender-ref ref=\"logstash\" \/&gt;\n    &lt;\/root&gt;\n&lt;\/configuration&gt;<\/code><\/pre>\n\n\n\n<p>\u4e3b\u8981\u914d\u7f6e<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"891\" height=\"354\" src=\"https:\/\/opshub.com.cn\/wp-content\/uploads\/2026\/01\/Image-113.png\" alt=\"\" class=\"wp-image-501\" srcset=\"https:\/\/opshub.com.cn\/wp-content\/uploads\/2026\/01\/Image-113.png 891w, https:\/\/opshub.com.cn\/wp-content\/uploads\/2026\/01\/Image-113-300x119.png 300w, https:\/\/opshub.com.cn\/wp-content\/uploads\/2026\/01\/Image-113-768x305.png 768w\" sizes=\"auto, (max-width: 891px) 100vw, 891px\" \/><\/figure>\n\n\n\n<p>\u542f\u52a8\u7a0b\u5e8f\u5c31\u4f1a\u6709\u65e5\u5fd7\uff0c\u7136\u540e\u53bbkibana\u4e2d\u67e5\u770b\u662f\u5426\u6709\u751f\u6210\u7684\u7d22\u5f15<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e00\u3001\u5b89\u88c5elasticsearch elasticsearch.yml\u5185\u5bb9\uff1a \u4e8c\u3001\u5b89\u88c5kibana kibana.yml\u5185\u5bb9\uff1a \u4e09\u3001\u5b89\u88c5redis redis.conf\u5185\u5bb9\uff1a \u56db\u3001\u5b89\u88c5logstatsh \u4e0b\u8f7dlogstash\uff0c\u7248\u672c\uff1a7.17.17 \u89e3\u538b\u540e\u653e\u5728\/opt\/elk\/logstash\u4e0b\uff0c\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\uff1a \u8bbe\u7f6eto-redis.conf (logstash\u6536\u96c6\u65e5\u5fd7\u5e76\u628a\u65e5\u5fd7\u8f6c\u50a8\u5230redis) \u8bbe\u7f6eredis-to.conf (logstash\u8bfb\u53d6redis\u91cc\u7684\u65e5\u5fd7\uff0c\u5e76\u5c06\u65e5\u5fd7\u63d2\u5165\u5230elasticsearch\u4e2d\uff0credis\u8d77\u4e86MQ\u6d88\u606f\u961f\u5217\u7684\u4f5c\u7528\uff0c\u6d88\u606f\u88ab\u53d6\u8d70\u540e\uff0c\u81ea\u52a8\u6e05\u9664\u6d88\u606f\uff1b\u6709\u4e86redis\u505aMQ\uff0c\u9632\u6b62es\u6302\u4e86\u4e22\u5931\u6d88\u606f\uff0c\u5e76\u4e14\u53ef\u4ee5\u51cf\u7f13es\u6536\u5230\u7684\u538b\u529b) \u68c0\u6d4blogstatsh\u914d\u7f6e\u6587\u4ef6\u7684\u8bed\u6cd5\uff1a \u542f\u52a8logstatsh\uff1a \u914d\u7f6elogback \u5f15\u8d77\u4f9d\u8d56 springboot\u5df2\u7ecf\u9ed8\u8ba4\u96c6\u6210\u4e86logback\u6846\u67b6\uff0c\u6240\u4ee5\u65e0\u9700\u5728\u5f15\u5165logback\u4e86\uff0c\u4ee5\u4e0b\u4f9d\u8d56\u662flogback\u548clogstash\u901a\u8baf\u6240\u9700\u7684\u4f9d\u8d56 \u914d\u7f6e\u6587\u4ef6 yml\u914d\u7f6e\u6587\u4ef6\u4e2d\u52a0\u4e0a \u5728resource\u4e2d\u52a0\u4e0alog\/logback-spring.xml\u914d\u7f6e\u6587\u4ef6 \u4e3b\u8981\u914d\u7f6e \u542f\u52a8\u7a0b\u5e8f\u5c31\u4f1a\u6709\u65e5\u5fd7\uff0c\u7136\u540e\u53bbkibana\u4e2d\u67e5\u770b\u662f\u5426\u6709\u751f\u6210\u7684\u7d22\u5f15<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-498","post","type-post","status-publish","format-standard","hentry","category-dockerkubernetes"],"_links":{"self":[{"href":"https:\/\/opshub.com.cn\/index.php?rest_route=\/wp\/v2\/posts\/498","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/opshub.com.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opshub.com.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opshub.com.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/opshub.com.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=498"}],"version-history":[{"count":3,"href":"https:\/\/opshub.com.cn\/index.php?rest_route=\/wp\/v2\/posts\/498\/revisions"}],"predecessor-version":[{"id":607,"href":"https:\/\/opshub.com.cn\/index.php?rest_route=\/wp\/v2\/posts\/498\/revisions\/607"}],"wp:attachment":[{"href":"https:\/\/opshub.com.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=498"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/opshub.com.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=498"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opshub.com.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=498"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}