elk搭建及Sprinboot整合elk

一、elk介绍

ELK是一个非常常用的日志收集系统,它是由elasticsearch,logstash,kibana组成。本文使用docker-compose来快速搭建起一个ELK日志栈demo

ElasticSearch:有强大的搜索功能的无模式数据库,可以简单的横向扩展,索引每一个字段,可以聚合分组数据,索引收集的日志数据并使它更易于查询。

Logstash:一个用于读取原始日志的工具,然后对日志进行分析和过滤,最后可以将其发送到另外一个服务,如索引或者存储系统,这里它将数据发送到ElasticSearch中。

Kibana:一个基于JavaScript的关于Elasticsearch的图形化接口。它可以用来运行Elasticsearch的查询,并且将结果以各种图表的方式可视化。支持Lucene的查询字符串的语法和Elasticsearch的过滤功能。

二、docker-compose搭建

(一)安装前准备事宜

1、Linux系统已安装jdk1.8
2、镜像拉取

docker pull docker.elastic.co/elasticsearch/elasticsearch:6.3.2
docker pull docker.elastic.co/logstash/logstash:6.3.2
docker pull docker.elastic.co/kibana/kibana:6.3.2

(二)安装步骤

1、建立/data/elk文件夹

mkdir -p /data/elk

2、建立/elasticsearch/data文件夹

mkdir -p /data/elk/elasticsearch/data
#授予权限
chmod 777 /data/elk/elasticsearch

在/elasticsearch下新建elasticsearch.yml文件:vim elasticsearch.yml

cluster.name: "docker-cluster"
network.host: 0.0.0.0
discovery.type: single-node
xpack.license.self_generated.type: basic
xpack.security.enabled: true
xpack.monitoring.collection.enabled: true

3、建立/kibana文件夹+kibana.yml文件
(1)mkdir -p /data/elk/kibana
(2)vim kibana.yml

server.name: kibana
server.host: "0"
elasticsearch.url: http://12.20.164.20:9200  #ip更换成自己的ip
xpack.monitoring.ui.container.elasticsearch.enabled: true
elasticsearch.username: "elastic"
elasticsearch.password: "changeme"

4、建立/logstash/conf.d文件夹+logstash.conf文件
(1)mkdir -p /data/elk/logstash/conf.d
(2)vim logstash.conf

input {
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 4560
    codec => json_lines
  }
}
output {
  elasticsearch {
    hosts => ["http://12.20.164.20:9200"]   #ip更换成自己的ip
    index => "springboot-logstash-%{+YYYY.MM.dd}"
    user => "elastic"
    password => "changeme"
  }
    stdout{codec => rubydebug}
}

(3)在logstash目录下新建logstash.yml文件

http.host: "0.0.0.0"
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.url: http://12.20.164.20:9200 #ip更换成自己的ip
xpack.monitoring.elasticsearch.username: "elastic" 
xpack.monitoring.elasticsearch.password: "changeme"

5、在elk目录下创建docker-compose.yml文件

version: '3.1'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.3.2
    environment:
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    volumes:
      - $PWD/elasticsearch/data:/usr/share/elasticsearch/data
      - $PWD/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    hostname: elasticsearch
    networks:
      - elk
    restart: always
    ports:
      - "9200:9200"
      - "9300:9300"
  kibana:
    image: docker.elastic.co/kibana/kibana:6.3.2
    environment:
      - ELASTICSEARCH_URL=http://12.20.164.20:9200 #elasticsearch查询接口地址
    hostname: kibana
    networks:
      - elk
    depends_on:
      - elasticsearch  #后于elasticsearch启动
    restart: always
    ports:
      - "5601:5601"
    volumes:
      - $PWD/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml
  logstash:
    image: docker.elastic.co/logstash/logstash:6.3.2
    command: logstash -f /etc/logstash/conf.d/logstash.conf  #logstash 启动时使用的配置文件
    volumes:
      - $PWD/logstash/conf.d:/etc/logstash/conf.d  #logstash 配文件位置
      - $PWD/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml
    hostname: logstash
    networks:
      - elk
    restart: always
    depends_on:
      - elasticsearch  #后于elasticsearch启动
    ports:
      - "7001-7005:7001-7005"
      - "4560:4560"
      - "9600:9600"
networks:
  elk:
    driver: bridge

6、运行命令

docker-compose up -d #启动
docker-compose up -d # 停止+删除容器

7、安装ik分词器
es自带的分词器对中文分词不是很友好,所以我们下载开源的IK分词器来解决这个问题。首先进入到plugins目录中下载分词器,下载完成后然后解压,再重启es即可。具体步骤如下:
注意:elasticsearch的版本和ik分词器的版本需要保持一致,不然在重启的时候会失败。可以在这查看所有版本,选择合适自己的版本: ik分词器github地址

#进入容器es
docker exec -it elasticsearch /bin/bash
#使用bin目录下的elasticsearch-plugin install安装ik插件
bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.2/elasticsearch-analysis-ik-6.3.2.zip
#退出
exit
# 再重启下容器
docker restart elasticsearch

(1)验证ik分词器是否安装成功:

// 增加一个叫test001的索引
curl -X PUT http://129.204.164.205:9200/test001
// 成功返回 {"acknowledged":true,"shards_acknowledged":true,"index":"test001"}

// ik_smart分词
curl -X POST \
'http://129.204.164.205:9200/test001/_analyze?pretty=true' \
-H 'Content-Type: application/json' \
-d '{"text":"我们是软件工程师","tokenizer":"ik_smart"}'

// ik_max_word分词
curl -X POST \
'http://129.204.164.205:9200/test001/_analyze?pretty=true' \
-H 'Content-Type: application/json' \
-d '{"text":"我们是软件工程师","tokenizer":"ik_max_word"}'

(2)返回结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
8、访问kibana页面:http://ip:5601
kibana页面 Dev Tools验证是否安装成功

# 其中test001为上面创建的索引
POST test001/_analyze
{
  "analyzer": "ik_max_word",
  "text": "你好我是东邪Jiafly"
}

在这里插入图片描述

#备注:不添加"analyzer": "ik_max_word",则是每个字分词,可以在下面kibana安装完成以后尝试一下
POST test001/_analyze
{
  "text": "你好我是东邪Jiafly"
}

在这里插入图片描述
9、在logstash中安装json_lines插件

# 进入logstash容器
docker exec -it elk_logstash_1 /bin/bash
# 进入bin目录
cd /bin/
# 安装插件
logstash-plugin install logstash-codec-json_lines
# 退出容器
exit
# 重启logstash服务
docker restart elk_logstash_1

在这里插入图片描述

三、Springboot整合elk示例demo

1、pom.xml中添加依赖

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

2、resources下添加logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
    <!--应用名称-->
    <property name="APP_NAME" value="mall-admin"/>
    <!--日志文件保存路径-->
    <property name="LOG_FILE_PATH" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/logs}"/>
    <contextName>${APP_NAME}</contextName>
    <!--每天记录日志到文件appender-->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>
    <!--输出到logstash的appender-->
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <!--可以访问的logstash日志收集端口,ip更换为自己的ip-->
        <destination>12.20.16.20:4560</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
    </appender>
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="LOGSTASH"/>
    </root>
</configuration>

3、测试结果
(1)添加索引,springboot-logstash*
在这里插入图片描述
在这里插入图片描述
(2)查看日志
在这里插入图片描述
4、调用接口测试
(1)调用接口
在这里插入图片描述
(2)kibana日志查询
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值