docker搭建elk环境并实现logstash监听logback,亲测有效!!!

这篇具有很好参考价值的文章主要介绍了docker搭建elk环境并实现logstash监听logback,亲测有效!!!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原因:线上日志太多且没有长期保存,导致问题发现晚点就找不到日志了,当然可以更改日志保存时间,但是还有个问题就是不好查询,需要根据时间去查找到底查询哪个日志文件,于是想到了用elk收集日志,这样就好查询了。

elk是什么

简单了解了一下elk是什么,首先elk是三个中间件。
Elasticsearch:一个分布式的实时搜索和分析引擎,用于存储和检索数据,相当于数据库。
Logstash:收集日志的,比如从一个日志文件中提取你想要的数据,实时收集等。
Kibana:一个用于数据可视化的工具,提供了强大的图形化界面,能够实时地查询和分析 Elasticsearch 中的数据,并以图表、表格等形式展示。

安装elasticsearch

elk最好都安装同一版本的,我这里都安装的7.7.0版本,本来我安装的是8版本的,但是这个版本的安装要复杂一些。

docker run --name es -d \
    -e ES_JAVA_OPTS="-Xms1g -Xmx1g" \
    -e "discovery.type=single-node" \
    -p 9200:9200 -p 9300:9300 \
    -v /home/zh188/elk/es/data:/usr/share/elasticsearch/data \
    -v /home/zh188/elk/es/plugins:/usr/share/elasticsearch/plugins \
    -v /home/zh188/elk/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
    --privileged elasticsearch:7.7.0

解释

docker run:运行容器的命令。
--name es:为容器指定一个名称,这里是 "es"。
-d:以分离模式(detached mode)运行容器,使其在后台运行。
-e ES_JAVA_OPTS="-Xms1g -Xmx1g":设置 Elasticsearch 的 Java 虚拟机参数。在这里,设置了最小堆内存 -Xms 为 1GB 和最大堆内存 -Xmx 为 1GB。
-e "discovery.type=single-node":设置 Elasticsearch 的节点发现类型为单节点模式。
-p 9200:9200 -p 9300:9300:将容器的 9200 和 9300 端口映射到主机的对应端口。9200 端口用于 HTTP 请求,9300 端口用于节点间通信。
-v /home/zh188/elk/es/data:/usr/share/elasticsearch/data:将主机上的目录挂载到容器中,用作 Elasticsearch 存储数据的路径。
-v /home/zh188/elk/es/plugins:/usr/share/elasticsearch/plugins:将主机上的目录挂载到容器中,用于存放 Elasticsearch 插件的路径。
-v /home/zh188/elk/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:将主机上的 Elasticsearch 配置文件挂载到容器中,覆盖默认配置。
--privileged:赋予容器特权,可能需要根据实际情况使用。
elasticsearch:7.7.0:指定要运行的容器镜像及其版本号。

默认启动连接是不需要账号密码的,如果要设置密码可以看看其他博客怎么设置账号秘密。
docker搭建elk环境并实现logstash监听logback,亲测有效!!!,docker,elk,logback

验证

执行一下命令

curl -v http://127.0.0.1:9200

docker搭建elk环境并实现logstash监听logback,亲测有效!!!,docker,elk,logback
返回这样的信息表示安装成功。

安装kibana

docker run -d --name kibana7 \
    -e ELASTICSEARCH_HOSTS=http://本机ip:9200 \
    -p 5601:5601 \
    kibana:7.7.0

注意:
ELASTICSEARCH_HOSTS=http://本机ip:9200
这儿表示连接我们的es,如果是集群的话需要去配置文件里面配置多个es地址
docker搭建elk环境并实现logstash监听logback,亲测有效!!!,docker,elk,logback
启动起来了,在页面上访问一下
http://服务器ip:5601
docker搭建elk环境并实现logstash监听logback,亲测有效!!!,docker,elk,logback

安装logstash

如果需要挂载配置文件到宿主机安装要稍微麻烦一些,需要先不挂载启动,然后把配置文件复制到你需要挂载的路径,把容器再删除,在重启挂载启动。

不挂载启动

sudo docker run --name logstash \
-p 4560:4560 \
-d logstash:7.7.0

启动完成后复制配置文件

docker container cp logstash:/usr/share/logstash/config /home/zh188/elk/logstash \
& docker container cp logstash:/usr/share/logstash/pipeline /home/zh188/elk/logstash

注意:/home/zh188/elk/logstash是自己建的文件夹,路径随意

停止并删除容器

docker stop logstash 
docker rm logstash 

挂载启动

sudo docker run --name logstash \
-p 4560:4560 \
-v /home/zh188/elk/logstash/config:/usr/share/logstash/config \
-v /home/zh188/elk/logstash/pipeline:/usr/share/logstash/pipeline \
-d logstash:7.7.0

启动之后在配置一下es路径,在挂载的/home/zh188/elk/logstash/config路径下有个logstash.yml文件

编辑logstash.yml

http.host: "0.0.0.0"
#xpack.monitoring.elasticsearch.hosts: [ "http://es服务器ip:9200" ]

配置管道信息

/home/zh188/elk/logstash/pipeline路径下有个logstash.conf配置文件

input {
    tcp {
        port => 9092
    }
}

filter {
    json {
        source => "message"
    }
}
output {
   elasticsearch {
            hosts => "192.168.5.188:9200"
            index => "hlw-log-index-test-%{+YYYY.MM.dd}"
        }
}
解释
input {
    tcp {
        port => 9092   //监听tcp9092端口
    }
}

filter {
    json {
        source => "message" //将取到的信息json格式化,就是过滤还有很多其他的过滤插件
    }
}
output {
//向es输出,索引为hlw-log-index-test-日期,每天新建一个索引
   elasticsearch {
            hosts => "192.168.5.188:9200"  //ip改为es服务器ip和端口
            index => "hlw-log-index-test-%{+YYYY.MM.dd}"
        }
}

注意:我是用docker部署,这儿我监听了9092端口,所以我一定要进行映射容器9092端口,刚开始我就没有映射导致一直接受不到消息。
docker搭建elk环境并实现logstash监听logback,亲测有效!!!,docker,elk,logback

配置logback

引起依赖

springboot已经默认集成了logback框架,所以无需在引入logback了,以下依赖是logback和logstash通讯所需的依赖

 <dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
            <version>6.3</version>
  </dependency>

配置文件

yml配置文件中加上

logging:
  config: classpath:log/logback-spring.xml

在resource中加上log/logback-spring.xml配置文件
docker搭建elk环境并实现logstash监听logback,亲测有效!!!,docker,elk,logback

<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="10 seconds">
    <!--<include resource="org/springframework/boot/logging/logback/base.xml"
        /> -->
    <contextName>Logback For Boss</contextName>
    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
    <property name="log.path" value="./logs/hlwserver/path" />
    <!-- 定义日志文件 输入位置 -->
    <property name="logDir" value="./logs/hlwserver/" />
    <!-- 日志最大的历史 30天 -->
    <property name="maxHistory" value="30" />

    <!-- logstash远程日志配置-->
    <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>192.168.5.188:9092</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
    </appender>

    <!-- 控制台输出日志 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%cyan(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %logger{36} - %msg%n</pattern>
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
    </appender>

    <!-- ERROR级别单独输出的日志 -->
    <appender name="ERROR"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logDir}\%d{yyyyMMdd}\error.log</fileNamePattern>
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger -
                %msg%n</pattern>
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
        <append>true</append>
        <prudent>false</prudent>
    </appender>

    <!-- 所有级别日志的文件输出 -->
    <appender name="ALL_LOGS"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logDir}\%d{yyyyMMdd}\info.log</fileNamePattern>
            <maxHistory>${maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger -
                %msg%n</pattern>
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
        <append>false</append>
        <prudent>false</prudent>
    </appender>

    <!--文件日志, 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${logDir}/%d{yyyyMMdd}/boss.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <!-- 异步输出 -->
    <appender name="dayLogAsyncAppender" class="ch.qos.logback.classic.AsyncAppender">
        <includeCallerData>true</includeCallerData>
        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>512</queueSize>
        <appender-ref ref="FILE"/>
    </appender>

    <!--专为 spring 定制
     -->
    <logger name="org.springframework" level="info"/>
    <!-- show parameters for hibernate sql 专为 Hibernate 定制 -->
    <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" />
    <logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />
    <logger name="org.hibernate.SQL" level="DEBUG" />
    <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
    <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />

    <!-- root级别 DEBUG -->
    <root level="INFO">
        <!-- 控制台输出 -->
        <appender-ref ref="STDOUT" />
        <!-- 文件输出 -->
        <appender-ref ref="ERROR" />
        <appender-ref ref="ALL_LOGS" />
        <appender-ref ref="logstash" />
    </root>
</configuration>

主要配置
docker搭建elk环境并实现logstash监听logback,亲测有效!!!,docker,elk,logback
启动程序就会有日志,然后去kibana中查看是否有生成的索引。

kibana简单使用

查看索引是否建立成功

docker搭建elk环境并实现logstash监听logback,亲测有效!!!,docker,elk,logback
docker搭建elk环境并实现logstash监听logback,亲测有效!!!,docker,elk,logback
索引自动建立成功并且有数据,说明搭建elk成功,接下来就看是否有日志信息。

新建索引模式

docker搭建elk环境并实现logstash监听logback,亲测有效!!!,docker,elk,logback
填入我们的索引名,点击下一步
docker搭建elk环境并实现logstash监听logback,亲测有效!!!,docker,elk,logback
docker搭建elk环境并实现logstash监听logback,亲测有效!!!,docker,elk,logback
docker搭建elk环境并实现logstash监听logback,亲测有效!!!,docker,elk,logback
创建成功

查看数据

docker搭建elk环境并实现logstash监听logback,亲测有效!!!,docker,elk,logback
docker搭建elk环境并实现logstash监听logback,亲测有效!!!,docker,elk,logback
可以看到我们的数据日志数据已经能成功展示了,我们可以检索了,检索可以根据字段,时间,这样能更好查看日志了,都看到这里了,点个赞在走吧。文章来源地址https://www.toymoban.com/news/detail-797240.html

到了这里,关于docker搭建elk环境并实现logstash监听logback,亲测有效!!!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker安装elasticsearch、kibana和logstash,实现ELK

    目录 一、 安装elasticsearch 二、安装elasticsearch-head 三、安装?kibana 四、安装 logstash 五、安装filebeat 1.拉取镜像 2.新建elasticsearch.yml 3.运行容器 -p 9200:9200 -p 9300:9300 -e “ES_JAVA_OPTS=-Xms512m -Xmx512m” -v /home/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -e “discov

    2024年02月02日
    浏览(48)
  • ELK环境搭建——Install with Docker

    Install Docker Desktop or Docker Engine Install the appropriate Docker application for your operating system. Make sure that Docker is allotted at least 4GiB of memory. In Docker Desktop, you configure resource usage on the Advanced tab in Preference (macOS) or Settings (Windows). Optional: Verify the Elasticsearch Docker image signature Although it’s op

    2024年02月14日
    浏览(43)
  • ELK日志平台(elasticsearch+logstash+kibana)搭建

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 为了实现分布式日志数据统一收集,实现集中式查询和管理 故障排查 安全信息和事件管理 ELK 是三个开源项目的首字母缩写,这三个项目分别是: Elasticsearch 、 Logstash 和 Kibana 。 • Elasticsearch 是一个搜索

    2024年02月03日
    浏览(48)
  • Docker环境下,如何搭建ELK堆栈?详细教程和使用分析

    在本文中,我们将探讨如何在Docker环境下搭建ELK(Elasticsearch,Logstash和Kibana)堆栈。ELK是一种流行的开源日志分析平台,可用于实时搜索,分析和可视化数据。使用Docker可以轻松地构建,部署和管理ELK堆栈。 在开始之前,我们需要安装Docker和Docker Compose。如果您还没有安装它

    2024年02月08日
    浏览(57)
  • elk(elasticsearch+logstash+kibana)搭建日志监控平台

    目录 elk架构原理 安装部署elasticsearch 什么是elasticsearch 创建elasticserch docker容器  安装部署kibana 什么是Kinana 创建Kibana docker容器         拉取镜像         创建配置文件:D:Programsdockerkibanakibana.yml          创建并运行kibana容器         验证登录kibana 安装部署logstash 什么

    2024年02月04日
    浏览(68)
  • docker安装elk(Elasticsearch+logstash+kibana)

    1. 安装Docker 如果您还没有安装Docker,请先安装Docker。您可以按照官方文档进行安装:https://docs.docker.com/engine/installation/ 安装 docker-ce [root@k8s-master ~]# yum install docker-ce -y [root@k8s-master ~]# systemctl start docker systemctl enable docker.service   配置 docker 镜像加速器和驱动 [root@k8s-master ~]#vi

    2024年01月20日
    浏览(68)
  • centos7 搭建ELK(elasticsearch、logstash、kibana)

    1、下载安装包 使用华为镜像站下载速度很快,华为镜像站: https://mirrors.huaweicloud.com/home ,下载时需要保证版本一致 2、安装elasticsearch 解压到当前目录 安装,将Elasticsearch移动到/opt目录之中 创建Elasticsearch用户 es 规定 root 用户不能启动 es,所以需要新建一个其他用户来启动

    2024年02月13日
    浏览(45)
  • bitnami Docker 安装ELK(elasticsearch, logstash, kibana)

    网上想找个用bitnami的ELK镜像安装ELK环境的,找了好半天没找到,于是自己尝试着安装了一套,分享给大家。 直接上干货: 安装Elasticsearch 用浏览器查看:http://localhost:9200, 应该可以看到ES安装成功 安装Logstash 这一步要点: 1、要把elk-es这个容器映射到logstash容器里面,里面的

    2024年02月04日
    浏览(48)
  • [ELK安装篇]:基于Docker虚拟容器化(主要LogStash)

    1.1.1:地址:https://blog.csdn.net/Abraxs/article/details/128517777 4.1.1:也可以尝试通过挂在目录在宿主机配置文件操作 docker exec -it ae0fbdac223a /bin/sh 配置文件默认信息: 4.1.2:修改默认配置:改成如下配置 4.2.1:配置文件默认信息: 4.2.2:修改填充默认配置文件信息:

    2024年02月15日
    浏览(37)
  • 最近在搭建ELK日志平台时,logstash报错JSON parse error

    直接进入正题,我在搭建elk日志,使用最简单的log4j2 socket json格式 输出到logstash. 但是logstash报错如下: [WARN ] 2023-08-30 10:15:17.766 [nioEventLoopGroup-2-2] jsonlines - JSON parse error, original data now in message field {:message=“incompatible json object type=java.lang.String , only hash map or arrays are supported”

    2024年02月10日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包