部署ELK

一、elasticsearch

#拉取镜像
docker pull elasticsearch:7.12.1
#创建ELK docker网络
docker network create elk
#启动ELK
docker run -d --name es --net elk -P -e "discovery.type=single-node" elasticsearch:7.12.1
#拷贝配置文件
docker cp es:/usr/share/elasticsearch/config/elasticsearch.yml /app/es/elasticsearch.yml
#删除容器 重新启动
docker run -d --name es \
--net elk \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
--privileged=true \
-v /app/es/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /app/es/data/:/usr/share/elasticsearch/data \
elasticsearch:7.12.1

如果报错jvm内存太小,在宿主机查询到容器的配置文件,并修改内存大小

find / -name jvm.options

在这里插入图片描述
在这里插入图片描述
验证
在这里插入图片描述

二、kibana

#拉取镜像
docker pull kibana:7.12.1
# 启动 kibana 容器并连接同一网络
docker run -d --name kibana --net elk -P -e "ELASTICSEARCH_HOSTS=http://es:9200" -e "I18N_LOCALE=zh-CN" kibana:7.12.1
#拷贝配置文件
docker cp kibana:/usr/share/kibana/config/kibana.yml /app/kibana/
vi /app/kibana/kibana.yml 把elasticsearch所在服务器ip配置下
#删除容器 重新启动
docker run -d --name kibana \
-p 5601:5601 \
-v /app/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml \
--net elk \
kibana:7.12.1

验证
在这里插入图片描述

三、logstash

docker pull logstash:7.12.1

docker run -d -P --name logstash --net elk logstash:7.12.1

# 拷贝数据
docker cp logstash:/usr/share/logstash/config /app/logstash/
docker cp logstash:/usr/share/logstash/data /app/logstash/
docker cp logstash:/usr/share/logstash/pipeline /app/logstash/

#文件夹赋权
chmod -R 777 logstash/

vi /app/logstash/config/logstash.yml 配置es ip
在这里插入图片描述
vi /app/logstash/pipeline/logstash.conf
logstash.conf

input {
  tcp {
    mode => "server"
    host => "0.0.0.0"  # 允许任意主机发送日志
    port => 5044
    codec => json_lines    # 数据格式
  }
}

output {
  elasticsearch {
      hosts  => ["http://106.54.220.184:9200"]   # ElasticSearch 的地址和端口
      index  => "elk"         # 指定索引名
      codec  => "json"
  }
  stdout {
    codec => rubydebug
  }
}

修改完配置文件,删除容器、重启容器

docker run -d --name logstash --net elk \
--privileged=true \
-p 5044:5044 -p 9600:9600 \
-v /app/logstash/data/:/usr/share/logstash/data \
-v /app/logstash/config/:/usr/share/logstash/config \
-v /app/logstash/pipeline/:/usr/share/logstash/pipeline \
logstash:7.12.1

验证
在这里插入图片描述

四、springboot集成elk

引入logstash依赖

      <!--集成logstash-->
        <dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
            <version>5.3</version>
        </dependency>

logback.xml日志配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <contextName>ProviderLog</contextName>
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <!--本工程中没使用文件输出日志,只用了console和logstash,此处配置无用-->
    <property name="LOG_HOME" value="home" />
    <!--可以手动指定log名字-->
    <property name="appName" value="wdnmdService" />
    <!--也可以使用工程的名字-->
    <springProperty scope="context" name="springAppName" source="spring.application.name"/>
    <springProperty scope="context" name="serverPort" source="server.port"/>
    <!-- logstash远程日志配置-->
    <appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>106.54.220.184:5044</destination>

        <!--        默认是JSON格式,所以logstash中应该配置codec为json_lines-->
        <!--        LoggingEventCompositeJsonEncoder是LogstashEncoder的父类,可以使用pattern自定义json的关键字
        -->
        <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder" >
            <!--        <encoder class="net.logstash.logback.encoder.LogstashEncoder" >-->
            <providers>
                <!--可以配合LogstashEncoder使用-->
                <!-- <timestamp/>-->
                <!--<version/>-->
                <!--<message/>-->
                <!--<loggerName/>-->
                <!--<threadName/>-->
                <logLevel/>
                <callerData/>
                <timestamp>
                    <timeZone>UTC</timeZone>
                </timestamp>
                <pattern>
                    <pattern>
                        {
                        "app": "${springAppName}_${serverPort}",
                        "level": "%level",
                        "thread": "%thread",
                        "class": "%logger{40}",
                        "message": "%message"
                        }
                    </pattern>
                </pattern>

            </providers>
        </encoder>
    </appender>
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <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>
    </appender>
    <!-- 按照每天生成日志文件 -->
    <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/system.log.%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>

    <!-- 日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="stash" />
        <appender-ref ref="STDOUT" />
        <!--        <appender-ref ref="FILE" />-->
    </root>
</configuration>

由于在配置中已经指定了索引名称 index => “elk”
创建索引:kibana-Stack Management-索引模式-创建索引-elk
查询日志:kibana-analytics-discover
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值