ELK整合:ElasticSearch定期删除过期数据

ELK 由三部分组成elasticsearch、logstash、kibana,elasticsearch是一个近似实时的搜索平台,它让你以前所未有的速度处理大数据成为可能。

Logstash:日志收集工具,可以从本地磁盘,网络服务(自己监听端口,接受用户日志),消息队列中收集各种各样的日志,然后进行过滤分析,并将日志输出到Elasticsearch中。

Elasticsearch:日志分布式存储/搜索工具,原生支持集群功能,可以将指定时间的日志生成一个索引,加快日志查询和访问。

Kibana:可视化日志Web展示工具,对Elasticsearch中存储的日志进行展示,还可以生成炫丽的仪表盘。

1:logstash安装部署文档

1.上传logstash安装包,解压logstash.tar.gz:

执行命令:tar -zxvf logstash.tar.gz

2.修改jdk版本为1.8,进入logstash/bin目录,修改logstash.lib.sh:

查看logstash.lib.sh中:

  setup_java() { if [ -z "$JAVACMD" ] ; then if [ -n "$JAVA_HOME" ] ;

then JAVACMD="$JAVA_HOME/bin/java" else JAVACMD="java"

  定义了一个setup_java的函数,setup_java被setup函数调用,最终被bin/logstash启动脚本调用,因此,我们只需要在logstash或logstash.lib.sh的行首位置添加两个环境变量:(为自己jdk地址)

   export JAVA_CMD="/opt/springboot/jdk1.8/jdk1.8.0_171/bin"

   export JAVA_HOME="/opt/springboot/jdk1.8/jdk1.8.0_171"

3.测试是否安装成功

 在logstash的bin目录下执行:

 ./logstash  -e 'input { stdin { } } output { stdout {} }'

运行成功后,输入数据,会打印出相关数据,及表示安装成功。

2:ElasticSearch安装部署文档

Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。
   Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

ElasticSearch和solr对比:

部署jdk:上传jdk-8u171-linux-x64.tar.gz,解压。

部署es:上传elasticsearch-6.3.1.tar.gz,解压。

修改启动脚本:

我们需要在启动elasticsearch时,就需要指定jdk版本。
即修改elasticsearch的启动脚本(elasticsearch_HOME/bin/elasticsearch)

[root@master01 elasticsearch-6.0.0]# vim bin/elasticsearch

# 添加以下代码

export JAVA_HOME=/opt/springboot/jdk1.8/jdk1.8.0_171

export PATH=$JAVA_HOME/bin:$PATH

运行:切换到普通用户: su   es;

      进入es的安装bin目录下,运行elasticSearch命令。

遇到的问题

报错:max size virtual memory for user [elastic] is too low, increase to [unlimited]

修改:

/etc/security/limits.conf

* hard memlock unlimited

* soft memlock unlimited

* hard nofile 65536

* soft nofile 65536

*  - as unlimited

/etc/sysctl.conf

fs.file-max = 2097152

vm.max_map_count = 262144

vm.swappiness = 1

elasticsearch.yml

node.name: elasticsearch

http.cors.enabled: true

http.cors.allow-origin: "*"

transport.host: 192.168.1.24

transport.tcp.port: 9300

http.port: 9200

network.host: 0.0.0.0

bootstrap.memory_lock: false

bootstrap.system_call_filter: false

 

3:springboot上传日志到elasticsearch

  1. 配置logstash相关配置文件

在bin目录下新建jdbc.conf,配置输入输出位置信息。

springboot整合logstash,添加依赖,配置文件,conf文件中配置监听的端口号,写到elasticsearch中。

input {

     tcp {

         port => 9250

         mode => "server"

         tags => ["tags"]

         codec => json_lines

         }

}

output{

      elasticsearch {

      hosts => ["192.168.1.24:9200"]

      index => "spboot-%{+YYYY.MM.dd}"

      }

      stdout{ codec => rubydebug }

}

启动logstash,指定配置文件,执行命令logstash -f ./jdbc.conf

后台执行命令:nohup ./logstash -f ./jdbc.conf > ./logstash.log 2>&1 &

上传到es中的文件名格式:spboot-2019.02.26,es清除数据的时候会根据格式删除当天的索引。

springboot整合logstash,上传日志到es:

  1. springboot添加相关依赖

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

  1. 在springboot项目中的src/main/resources目录下,创建logback-spring.xml

文件,配置相关信息。

指定logstash的安装地址及打印相关日志

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <contextName>logback</contextName>
    <!-- 记录文件到特定目录 -->
    <!-- <property name="log.path" value="E:\\test\\logback.log" /> -->
    <property name="log.path" value="./logback.log" />
    <appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>192.168.1.24:9250</destination>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender>
    <!--输出到控制台-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
         <level>ERROR</level>
        </filter>-->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <!--输出到文件-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logback.%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <root level="info">
        <appender-ref ref="stash"/>
        <!--<appender-ref ref="console" />
        <appender-ref ref="file" />-->
    </root>
    <!-- logback为 java 中的包
    <logger name="com.dudu.controller"/>
    logback.LogbackDemo:类的全路径
    <logger name="com.dudu.controller.LearnController" level="WARN" additivity="false">
     <appender-ref ref="console"/>
    </logger> -->
</configuration>

 

  1. 优化ElasticSearch定期删除过期数据

在/opt/springboot/elasticsearch/delete-es目录下创建es-del.sh文件

  文件内容:

#!/bin/bash
# @Author: richard
# @Date:   2017-08-11 17:27:49
# @Last Modified by:   richard
# @Last Modified time: 2017-08-11 18:04:58
#保留近 N 天
KEEP_DAYS=7 
# 删除前 N的所有天到 前N+10天==>每天执行
function get_todelete_days()
{
    # declare -A DAY_ARR
    # DAY_ARR=""
    for i in $(seq 1 10);
    do
        THIS_DAY=$(date -d "$(($KEEP_DAYS+$i)) day ago" +%Y.%m.%d)

        DAY_ARR=( "${DAY_ARR[@]}" $THIS_DAY)
    done
    echo ${DAY_ARR[*]} 
}
# 返回数组的写法
TO_DELETE_DAYS=(`get_todelete_days`)
for day in "${TO_DELETE_DAYS[@]}"
do
    echo "$day will be delete"  
    curl -XDELETE 'http://127.0.0.1:9200/*-'${day}
done

 

在目录下启动定时任务执行此文件,

输入:crontab -e

输入内容:

30 23 * * 7 /opt/springboot/elasticsearch/delete-es/es-del.sh

然后按Esc输入  :wq   即可。

每周日晚上23:30执行一次。

定时任务执行log文件地址:/var/spool/mail/root 可查看执行错误信息。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值