docker快捷部署使用ELK实现分布式日志管理

引言

  • 本次使用的ELK版本均为7.17.5,日志推送方式为logstash直推ES存储,适用与日志量中小规模,如有大日志量高并发场景可以自行集成kafka等消息中间件为缓冲
  • 本次描述的为SpringBoot – logback集成logstash的使用方式,如使用其他日志框架或其他语言可自行集成使用logstash即可

一、环境准备

- 安装docker – 详见此博客中的第一步 – CentOS安装Docker – docker安装

二、docker安装elasticsearch kibana logstash

安装:
记得开放使用的端口,或者关闭防火墙

提示:需要提升虚拟机或者服务器的内存到8G以上
拉取镜像并安装

docker pull elasticsearch:7.17.5
docker pull kibana:7.17.5
docker pull logstash:7.17.5

为容器创建网络

docker network create es-net
													查看网络是否创建成功

查看网络是否创建成功
启动elasticsearch容器

  • 众所周知,ES是个内存大杀器,此处我仅给它配置512M的内存空间,不够用的可自行修改
docker run -it -d \
--name es \
--restart=always \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms512m -Xmxm" \
-v es-data:/usr/share/elasticsearch/data \
-v es-plugins:/usr/share/elasticsearch/plugins \
--privileged \
--network es-net \
elasticsearch:7.17.5
  • 访问9200端口成功得到响应说明es安装启动成功
    es访问测试

启动kibana容器

docker run -it -d \
-p 5601:5601 \
--name kibana --restart=always \
-e ELASTICSEARCH_URL=http://127.0.0.1:9200  \
--network=es-net \
kibana:7.17.5
  • 访问5601端口成功得到响应说明kibana安装启动成功
    kibana访问成功首页
    堆栈监测

监测结果
注意:

  • 至此kibana和elasticsearch已经安装成功,可以正常使用,如果想让它变得好用可以将kibana汉化以及给ES设置密码、安装ik分词器 – 详见 ek安装使用
  • 如果es中的索引库默认的生命周期不满足日志存储的需求,可自行设置生命周期加到索引模式上,如此即可实现日志到达设置的周期时间自动删除 – 详见 设置生命周期

启动logstash容器

  • 创建logstash的配置文件 logstash.conf
mkdir -p /home/elk
cd /home/elk
vim logstash.conf
# 此处写入配置内容
:wq
  • 内容如下
input {
  tcp{
    port => 5044
    #输入为json据
    codec => json_lines
  }
}
 
filter {
  ruby{
    code => "event.set('timestamp', (event.get('@timestamp').time.localtime + 8*60*60).strftime('%Y-%m-%d %H:%M:%S'))"
  }
  ruby{
    code => "event.set('@timestamp',event.get('timestamp'))"
  }
  mutate {
    remove_field => ["timestamp"]
  }
}
 
output {
  stdout { 
    #这个是安装时详细打印配置,生产中注释掉
    codec => rubydebug
    # 设置日志级别
    level => warn
  }
 
  elasticsearch {
    hosts => ["elasticsearch:9200"] # elasticsearch也可设置成指定IP
    index => "logstash-%{[server_name]}-%{+YYYY.MM.dd}"
  }
}
  • 启动logstash容器命令
docker run -d \
--name logstash \
--network es-net \
--privileged \
-p 5044:5044 -p 5047:5047 -p 9600:9600 \
-v /home/elk/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \
-e TZ=Asia/Shanghai \
logstash:7.17.5
  • 使用docker ps 命令查看当前正在运行的容器,若有以下三个容器正常运行即表示ELK部署完成
    docker容器
    注意:

  • 如果有容器没有启动成功,使用docker ps -a 查看到未启动成功的容器并复制id

  • 使用docker logs 容器id 命令查看日志查看启动失败原因

  • logstash启动失败的绝大多数原因是配置文件格式不正确,启动时就会报异常

  • logstash启动成功后客户端推送日志不报错但ES中未存储日志的多为es地址配置错误(此时需要注重容器之间的网络通信是否互通,测试方法:可直接进入logstash容器使用curl命令尝试访问配置的地址,配置的网址址访问成功才表示容器之间网络互通)

    至此,ELK的安装部署已经完成

三、SpringBoot中logback集成logstash向es推送日志

首先在POM文件中引入如下logback集成logstash的依赖

		<!-- 向logstash推送日志数据-->
        <dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
            <version>6.3</version>
        </dependency>

然后在logback的配置文件中添加如下内容

  • 配置文件位置
    在这里插入图片描述

  • 配置文件内容

  <!--logback输出到logstash-->
        <appender name="STASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
            <destination>lostash容器所在的服务器IP:5044</destination>
            <encoder class="net.logstash.logback.encoder.LogstashEncoder">
                <!--打印行号、方法名,官方不建议在生产环境开启此配置,默认为fa1s(关闭),具网友测试开启后的耗时是未开启的大约360倍的时间(业务量小的 -->
                <includeCallerData>true</includeCallerData>
                <!--   设置时区  -->
                <timeZone>UTC</timeZone>
                <!--日期格式化-->
                <!--<timestampPattern>yyyy-MM-dd'T'HH:mm:ss.SSS</timestampPattern>-->
                <!-- 添加自定义属性,这里的server_name.是服务名-->
                <customFields>{"server_name":"server-bcd"}</customFields>
            </encoder>

            <!-- 此日志文件只记录error级别的 -->
            <!--<filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>error</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>-->
        </appender>

        <!--记录到文件时,记录两类一类是error日志,一个是所有日志-->
        <root level="info">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="STASH"/>
        </root>

以下是日志推送测试

  • 日志推送测试代码
    open fun test() {
        for (i in 1..10) {
            log.error("测试日志推送>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
        }
    }
  • 在Kibana中查看日志
    • 创建索引模式匹配到自己需要查询的日志索引库
      配置索引模式一
      配置索引模式二
      配置索引模式三
    • 查看日志
      discover
      discover
      注意:
  • 此时查看到的日志的时间格式有些不符合浏览习惯可改至YYYY-MM-DD HH:mm:ss.SSS
    时间格式设置
    至此已使用ELK完成了分布式日志管理系统的部署搭建及集成使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值