elk部署

本文详细描述了如何在单机环境下利用Docker部署Elasticsearch7.12.1、Kibana7.12.1和Logstash7.12.1,以及如何在SpringBoot应用中配置日志输出到这些组件。包括创建docker网络、运行容器、配置文件同步和验证安装过程。
摘要由CSDN通过智能技术生成

1、环境准备

jdk

1.8

docker

Docker version 20.10.9, build c2ea9bc

elasticsearch

7.12.1

kibana

7.12.1

logstash

7.12.1

部署模式:docker + 单机

2、下载镜像

docker pull elasticsearch:7.12.1
docker pull logstash:7.12.1
docker pull kibana:7.12.1

3、安装

3.1 安装es

# 创建一个docker 网络环境,名为elk
docker network create elk
# 运行es容器
docker run -d --name es --net elk -P -e "discovery.type=single-node" elasticsearch:7.12.1
# 宿主机创建es目录
mkdir es
chmod 666 es
# 进入es目录
cd es
# 查看当前目录
/root/work/es
# 将es容器中的配置文件复制到es目录中
docker cp es:/usr/share/elasticsearch/config/elasticsearch.yml /root/work/es/elasticsearch.yml
# 在es目录中创建data目录
mkdir data
# 准备工作已完成,删除临时创建的es容器
docker rm -f es

# 运行新的容器
docker run -d --name es \
--net elk \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
--privileged=true \
-v $PWD/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v $PWD/data/:/usr/share/elasticsearch/data \
elasticsearch:7.12.1

验证安装是否成功

[root@localhost es]# curl 127.0.0.1:9200
{
  "name" : "57df77848d46",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "mYN2JAk_RGqn58QcPho3Pw",
  "version" : {
    "number" : "7.12.1",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "3186837139b9c6b6d23c3200870651f10d3343b7",
    "build_date" : "2021-04-20T20:56:39.040728659Z",
    "build_snapshot" : false,
    "lucene_version" : "8.8.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

3.2 安装kibana

# 启动 kibana 容器并连接同一网络
docker run -d --name kibana --net elk -P -e "ELASTICSEARCH_HOSTS=http://es:9200" -e "I18N_LOCALE=zh-CN" kibana:7.12.1

cd /root/work
mkdir kibana
docker cp kibana:/usr/share/kibana/config/kibana.yml kibana/
chmod 666 kibana/kibana.yml

修改配置文件

server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://192.168.2.6:9200" ]
monitoring.ui.container.elasticsearch.enabled: true
# 开启 kibana 的汉化
i18n.locale: zh-CN

重新启动

docker rm -f kibana
docker run -d --name kibana \
-p 5601:5601 \
-v $PWD/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml \
--net elk \
kibana:7.12.1

访问kibana,通过ip:5601 可访问kibana,如图

3.3 安装logstash

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

mkdir logstash

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

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

修改logstash相关配置文件

  • 修改 logstash/config 下的 logstash.yml 文件,主要修改 es 的地址
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://192.168.2.6:9200" ]
  • 修改 logstash/pipeline 下的 logstash.conf 文件
input {
  tcp {
    mode => "server"
    host => "0.0.0.0"  # 允许任意主机发送日志
    port => 5044
    codec => json_lines    # 数据格式
  }
}

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

重新启动容器

#注意先删除之前的容器
docker rm -f logstash

# 启动容器并挂载
docker run -d --name logstash --net elk \
--privileged=true \
-p 5044:5044 -p 9600:9600 \
-v $PWD/logstash/data/:/usr/share/logstash/data \
-v $PWD/logstash/config/:/usr/share/logstash/config \
-v $PWD/logstash/pipeline/:/usr/share/logstash/pipeline \
logstash:7.12.1

4、springboot验证

logback配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds">

    <springProperty scope="context" name="LOGBACK_SERVERS" source="spring.kafka.bootstrap-servers"/>
    <!-- 日志存放路径 -->
    <property name="log.path" value="/data/awhlogs" />
    <!-- 日志输出格式 -->
    <property name="log.pattern" value="%d{yyyy-MM-dd:HH:mm:ss.SSS,GMT+08} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />

    <!-- 控制台输出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>192.168.3.155:5044</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
    </appender>


    <!-- 系统日志输出 -->
    <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/info.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志最大的历史 60天 -->
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>INFO</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/error.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志最大的历史 60天 -->
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>ERROR</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>


    <!-- 系统模块日志级别控制  -->
    <logger name="com.chinatower" level="info" />
    <logger name="druid.sql.ResultSet" level="info" />
    <!-- Spring日志级别控制  -->
    <logger name="org.springframework" level="info" />

    <root level="debug">
        <appender-ref ref="console" />
        <appender-ref ref="LOGSTASH"/>
    </root>

    <!--系统操作日志-->
    <root level="debug">
        <appender-ref ref="file_info" />
        <appender-ref ref="file_error" />
        <appender-ref ref="LOGSTASH"/>
    </root>

</configuration>

pom

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

kibana配置索引

kibana查看数据

docker run -d --name kafka-server \
    --network app-tier \
    -p 9092:9092 \
    -e ALLOW_PLAINTEXT_LISTENER=yes \
    -e KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper-server:2181 \
    -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.3.155:9092 \
    bitnami/kafka:latest
  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值