ELK:利用X-PACK账号鉴权,清理过期ES索引数据(二)

  • Post author:
  • Post category:其他




利用X-PACK账号鉴权

  • 进入es容器,打开

    config

    目录下的

    elasticsearch.yml

    编辑,添加如下配置

    
    
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    http.cors.allow-headers: Authorization
    xpack.security.enabled: true
    xpack.security.transport.ssl.enabled: true


  • 保存退出容器后,重启es容器

  • 再次进入es容器,执行如下命令,设置x-pack密码

    
    
    /usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive


  • 根据提示信息依次设置每个账号的密码(建议统一设置,防止混淆),以下是各账号用处

    elastic:超级管理员账号

    kibana:Kibana访问专用账号

    logstash_system:Logstash访问专用账号

    beats_system:FileBeat访问专用账号

    apm_system:APM系统专用账号

    remote_monitoring_user:远程监控账号

  • 设置好密码后退出容器,并重启es容器

  • es启动后,访问:

    http://ip:9200,

    若出现如下如下提示说明密码设置成功


  • 输入elastic账号密码,出现如下提示,说明es容器启动正常


  • 进入kibana容器,编辑

    config

    目录下的

    kibana.yml

    文件,添加es账号密码,

elasticsearch.username: "kibana"
elasticsearch.password: "刚才设置的密码"

  • 进入logstash容器,编辑

    config

    目录下的

    logstash.yml

    文件,添加logstash连接es的账号密码

    
    
    xpack.monitoring.elasticsearch.username: "logstash_system"
    xpack.monitoring.elasticsearch.password: "刚才设置的密码"


  • 保存退出容器,并重启kibana容器,启动完打开

    http://ip:5601,

    出现如下页面说明密码设置成功,使用超级管理员账号elastic登录即可。


  • 进入logstash容器,编辑

    pipeline

    目录下的

    logstash.conf

    文件,改成如下
input {
   tcp {
       mode => "server"
       host => "0.0.0.0"
       port => 4561
       codec => json_lines
       type => "error"
    }
    tcp {
        mode => "server"
        host => "0.0.0.0"
        port => 4562
        codec => json_lines
        type => "business"
    }
}
output {
    elasticsearch {
        hosts => "es:9200"
        index => "fincourt-logs-%{type}-%{+YYYY.MM.dd}"
        user => "elastic"
        password => "刚设置的密码"
    }
}
  • 保存退出容器后,重启logstash容器。



清理过期ES索引数据

  • 进入elk目录,创建es_clear.sh脚本文件,

    touch es_clear.sh
    vi es_clear.sh


  • 编辑内容如下(注意最下方配置的

    账号和密码


#!/bin/bash
# @Author: zhangzhijian
# @Date: 2021-8-24 15:18:52
# 用于es中日志索引的定时删除

# 保留近 N 天
KEEP_DAYS=15
# 删除最近 M 天,即删除是从 M+N到N
DEL_DAYS=15
# 删除索引名,留空则使用*-日期(*-2021.02.20)
INDEX_NAME=()
# 需保留的索引名,留空则使用


# 删除前 N的所有天到 前N天==>每天执行
function get_todelete_days()
{
# declare -A DAY_ARR
# DAY_ARR=""
for i in $(seq $DEL_DAYS $(($KEEP_DAYS+$DEL_DAYS)));
do
THIS_DAY=$(date -d "$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
if [ ${#INDEX_NAME[@]} -eq 0 ]; then
L_INDEX_NAME=( "${L_INDEX_NAME[@]}" "*-"${day} )
else
for each in "${INDEX_NAME[@]}"
do
L_INDEX_NAME=( "${L_INDEX_NAME[@]}" "${each}-${day}" )
done
fi
done

for l_index in "${L_INDEX_NAME[@]}"
do
echo -n "$l_index will be delete"
curl -XDELETE -u"elastic:12345678" 'http://127.0.0.1:9200/'$l_index
echo ""
done

  • 给脚本添加权限

    
    
    chmod +x ./es_clear.sh


  • 创建logs文件夹,记录脚本执行日志

    mkdir logs
    chmod 777 logs


  • 利用crontab定时执行脚本文件

    
    
    crontab -e


  • 编辑内容如下,每天1点执行,保存退出

    
    
    0 1 * * * /elk/es_clear.sh > /elk/logs/es_clear_$(date "+\%Y-\%m-\%d").log 2>&1 &



版权声明:本文为jane_zhang1022原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。