一、ELK源码安装

elk官网https://www.elastic.co/
注意:elk里面的组件必须都是统一版本
本次安装
logstash 收集日志
elasticsearch建立索引
kibana视图展示

ELK学习链接:
https://edu.hellobi.com/course/106/lessons 登录名:21种犹豫
https://www.cnblogs.com/kevingrace/p/5919021.html
http://www.cnblogs.com/kevingrace/p/5919021.html
一、安装elasticsearch-7.x

1、介绍:(启动es内存不能小于2G)
es7.x配置文件讲解 https://blog.csdn.net/lukabruce/article/details/104814214
ELK套件(ELK stack)是指ElasticSearch、Logstash/filebeta和Kibana三件套。这三个软件可以组成一套日志分析和监控工具。
Logstash:负责在客户端的日志日志和数据处理,它支持日志过滤功能
filebeta: 和logstash一样都是收集日志工具,它是轻量级工具。
ElasticSearch(es):负责将logstash 收集的信息整理存储并建立索引
Kibana:是一个web界面,便于日志分析
logstash分为两部分:agent 和 indexer ,agent负责从客户端获取日志,indexer负责将得到的日志进行分析然后输出到es,一下是indexer的三部分
input: 负责从哪里获取日志数据
filter: 负责对日志数据进行分析和结构化
tput: 负责将结构化的数据存储进入elasticsearch
在这里插入图片描述
本案例使用版本:
服务端:ElasticSearch-5.3.1
服务端:Kibana-5.3.1
客户端:Logstash-5.3.1

1、创建es的运行用户这个用户需要能登陆系统(注意不能用root用户启动elasticsearch)

# useradd elk   # 不要设置密码(ssh设置禁止空密码登录)

2、ElasticSearch和Logstash依赖于JDK,所以需要安装JDK1.8:

# yum -y install java-1.8.0-openjdk*
# java -version

3、安装ES

(1)安装elasticsearch
# useradd elk
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.3.tar.gz
# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.1.tar.gz
# tar zxvf elasticsearch-5.3.1.tar.gz -C /usr/local/
es参数详解:https://blog.csdn.net/qq_21387171/article/details/53577115
es参数优化:https://www.cnblogs.com/zlslch/p/6478773.html


(2)修改配置文件
# vi /usr/local/elasticsearch-5.3.1/config/elasticsearch.yml
修改以下:
# 允许外部用户通过哪个地址访问我

network.host: 172.16.12.33      #监听本机地址

http.port: 9200                              #监听端口
bootstrap.system_call_filter: false          #因为centos6不支持SecComp,需要增加这一行
cluster.name: myes1                          #自定义当前集群的名称

node.name: node-1                            #自定义当前节点的名称

#bootstrap.mlockall:true                      #锁住内存,防止内存不够时自动使用交换分区并降低性能

cluster.initial_master_nodes: ["node-1"]     # 指定主节点为当前节点

4、做一些elasticsearch 的优化配置,否则启动es会报错

(1) #vim /etc/security/limits.conf
*    -    nofile    65536      #修改文件句柄数
*    soft  memlock    unlimited  #添加,防止es锁定内存报错
*    hard  memlock    unlimited  #添加,防止es锁定内存报错

(2) #vim /etc/security/limits.d/90-nproc.conf
* soft nproc 2048    #修改

(3) #vim /etc/sysctl.conf
vm.max_map_count=655350     #增加

(4) 让配置生效
# sysctl -p
[root@jxq-c2-16-2 ~]# sysctl -a|grep "vm.max_map"   #查看优化
vm.max_map_count = 262144
重新登录终端
# ulimit -n                   #查看优化
66535 

(5) 调整jvm参数防止elk占用太多内存
# cat /etc/elasticsearch/jvm.options 
# Xmx represents the maximum size of total heap space
-Xms2g
-Xmx2g

5、进入es安装目录安装中文分词插件

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.2.3/elasticsearch-analysis-ik-6.2.3.zip
#查看插件
[root@jxq-c2-16-2 ~]# ls /alidata/server/es/plugins/
analysis-ik

6、启动es(内存不能太小否则会启动失败,我虚拟机设置4G)

# chown -R elastic.elastic /usr/local/elasticsearch-5.3.1
# su - elastic   #切换成普通用户
#两种后台启动方式
$ nohup /usr/local/elasticsearch-5.3.1/bin/elasticsearch &     #第一种(会生成nohup.out文件)
/application/elasticsearch-6.5.4/bin/elasticsearch -d -p pid   #第二种(推荐)

# tail -f /home/soft/elasticsearch-7.12.0/logs/my-application.log   # 启动日志

#查看端口
[root@localhost ~]# netstat -nputl|grep java 
tcp        0      0 ::ffff:172.16.12.33:9200    :::*                        LISTEN      2214/java           
tcp        0      0 ::ffff:172.16.12.33:9300    :::*                        LISTEN      2214/java  

#访问测试 
# curl http://172.16.100.160:9200                         
{
  "name" : "linux-node1",
  "cluster_name" : "myes1",
  "cluster_uuid" : "cxsBNynXT9qnoz-Mqw6tew",
  "version" : {
    "number" : "5.3.1",
    "build_hash" : "5f9cf58",
    "build_date" : "2017-04-17T15:52:53.846Z",
    "build_snapshot" : false,
    "lucene_version" : "6.4.2"
  },
  "tagline" : "You Know, for Search"
}

#查看es当前健康状态
[root@localhost ~]# curl -XGET '172.16.12.33:9200/_cat/health?v&pretty'
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1545621044 03:10:44 elasticsearch green 1 1 0 0 0 0 0 0 - 100.0%     #green表示健康

#查看当前有哪些节点
[root@localhost ~]# curl -XGET '172.16.12.33:9200/_cat/nodes?v&pretty' 
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.16.12.33 10 95 0 0.00 0.00 0.00 mdi * 1NNA3xV                    #只有这一个节点

#查看当前的索引文件(索引就是用来记录logstash收集的日志条目,相当于es的数据库)
# curl -XGET '172.16.12.33:9200/_cat/indices?v&pretty'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size #我这里还没有索引

6.1、为elasticsearch设置密码
https://zhuanlan.zhihu.com/p/163337278
https://blog.csdn.net/qq_27639777/article/details/98470844

(1) 启动elasticsearch需要依赖SSL,所以需要先创建ssl证书
bin/elasticsearch-certutil ca
ENTER ENTER
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
ENTER ENTER ENTER

(2) 编辑配置文件
cat /home/soft/elasticsearch-7.12.0/config/elasticsearch.yml
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: cert/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: cert/elastic-certificates.p12

(3) 重启elasticsearch
# killall java
# /home/soft/elasticsearch-7.12.0/bin/elasticsearch -d -p pid

(4) 设置用户密码(用户名是默认elastic  密码:全部统一wenqiang123)
bin/elasticsearch-setup-passwords interactive
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y
Enter password for [elastic]: 
Reenter password for [elastic]: 
Enter password for [apm_system]: 
Reenter password for [apm_system]: 
Enter password for [kibana_system]: 
Reenter password for [kibana_system]: 
Enter password for [logstash_system]: 
Reenter password for [logstash_system]: 
Enter password for [beats_system]: 
Reenter password for [beats_system]: 
Enter password for [remote_monitoring_user]: 
Reenter password for [remote_monitoring_user]: 
Changed password for user [apm_system]
Changed password for user [kibana_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]

(5) 再次登录就需要用户名密码了
$ curl 10.4.7.10:9200 -u elastic:wenqiang123
# curl -XGET -u "elastic:wenqiang123" '10.4.7.10:9200/_cat/indices?v&pretty'

{
  "name" : "node-1",
  "cluster_name" : "my-application",
  "cluster_uuid" : "anM314mzRXmG2iLP_Mg_SA",
  "version" : {
    "number" : "7.12.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "78722783c38caa25a70982b5b042074cde5d3b3a",
    "build_date" : "2021-03-18T06:17:15.410153305Z",
    "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"

6.1、为elasticsearch设置 systemctl 启动

[root@bogon ~]# cat /usr/lib/systemd/system/elasticsearch.service 
[Unit]
Description=elasticsearch          # 描述
Wants=network-online.target        # 先启动
After=network-online.target        # 后启动


[Service]
EnvironmentFile=/home/soft/elasticsearch-7.12.0/config/elasticsearch.yml        # elasticsearch配置文件
WorkingDirectory=/home/soft/elasticsearch-7.12.0                               # elasticsearch安装目录
User=elk                                                                        # elasticsearch启动用户
Group=elk                                                                       # elasticsearch启动用户组
ExecStart=/home/soft/elasticsearch-7.12.0/bin/elasticsearch                     # elasticsearch启动命令路径

# 将错误消息重定向到journal
StandardOutput=journal
StandardError=inherit
# 允许打开的最大文件描述符
LimitNOFILE=100000
# 指定最大进程数
LimitNPROC=100000
# 禁用超时逻辑并等待进程停止
TimeoutStopSec=0  
# 用于停止java进程的信号
KillSignal=SIGTERM
# 关闭java进程永远不会被终止选项
SendSIGKILL=no
# 只向JVM而不是其控制组发送信号
KillMode=process
# 当JVM接收到SIGTERM信号时,它将退出,并返回代码143
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

# chmod +x /usr/lib/systemd/system/elasticsearch.service 

# systemctl daemon-reload
# systemctl enable elasticsearch
# systemctl start elasticsearch
# systemctl status elasticsearch

6.2、为elasticsearch配置环境变量

# cat /etc/profile|tail -2
elasticsearch_path=/home/soft/elasticsearch-7.12.0/bin              # 先为elasticsearch的路径设置一个变量
export PATH=$PATH:$elasticsearch_path:/usr/bin:/usr/sbin:/bin:/sbin # 然后设置环境变量
# source /etc/profile

7、es每天都会生出日志需要写脚本只保留最近一个月的

[root@jxq-c2-16-2 elk]# cat delete_index.sh 
#!/bin/bash
#当磁盘根分区使用率大于80%删除两个月以前的ELK索引数据

#disk size
Disk_size=`df -h|sed -n '2p'|awk '{print $5}'|awk  -F "%" '{print $1}'`

#TIME
year=`date +%Y`
month=`date -d "2 month ago" +%m`

#COMMOND
if [ $Disk_size -gt 80 ];then

    curl -XDELETE http://10.1.2.200:9200/*-${year}.${month}.*

    if [ $? -eq 0 ];then

        echo -e "\nclear elk ok!"

    else

        echo "clear elk have a  error!"
    fi

fi

二、安装logstash-5.3.1

1、修改logstash配置文件

#vim /usr/local/logstash/conf/logstash.yml
config.reload.automatic: true        #修改为true可以让logstash实时生效,不用每次都重新启动

2、下载安装包

# wget https://artifacts.elastic.co/downloads/logstash/logstash-5.3.1.tar.gz
# tar zxvf logstash-5.3.1.tar.gz -C /usr/local/

3、测试logstash

#直接将标准输入的内容,输出到屏幕上
# /application/logstash-5.3.1/bin/logstash -e 'input{ stdin{} } output{ stdout{ codec => rubydebug } } '

3.1、logstash配置参数基础插件讲解

(1)标准输入插件
input{                                       #这是一个标准输入插件    
    stdin{                                   #只写这个表示从键盘输入【标准输入】
    }
    
    stdin{                                   #代表标准输入的意思
        add_field => {"name" => "elk"}       #添加固定字段[可选]
        codec => "plain"                     #编解码器[可选]
        tags => ["test"]                     #标签的意思,test表示这是一个宿主[可选]
    }
    file{                                    #表示从文件读取,file插件能够实时的读取文件里面的信息类似tail -f的功能
        type => "log"                        #自定义类型划分
        path => "/var/log/access.log"        #表示日志从哪里读取,支持收集多个日志:path => ["/xxx/xxx","/xxx/xxx"]
        start_position => "beginning"        #表示从文件什么位置读取数据,beginning表示文件开头,默认是end,end表示从当前位置
    }
    elasticsearch {                          #表示把数据发给elasticsearch并建立索引
        index => "nginx_error_10.1.1.10-%{+yyyy.MM.dd}"         #生成索引名字,kibana创建索引的时候添加这个名字
        hosts => ["10.1.2.200:9200"]                            #指定elasticsearch的访问地址
    }
}

(2)过滤器插件
filter{
    grok{                                            #grok插件,用于过滤需要的东西,需要掌握正则匹配
    }
    mutate{                                          #也是过滤器插件,将grok过滤出的字段进行数据转换
    }
    split{                                           #也是过滤器插件,对数据进行拆分
    }
    
    date {                                                      #时间字段
          match => ["time", "yyyy-MM-dd HH:mm:ss,SSS"]          #生成logstash自己的时间字段
    }
}


(3)标准输出插件
output{                                      #这是一个标准输出插件
    stdout{                                  #输出到屏幕
        codec => rubydebug                   #用于调试
    }
    elasticsearch {                          #输出到elasticsearch
        index => "nginx_error_10.1.1.10-%{+yyyy.MM.dd}"         #生成索引名字,kibana创建索引的时候添加这个名字
        hosts => ["10.1.2.200:9200"]                            #指定elasticsearch的访问地址
    }
    file{                                                       #输出到文件
        path => "/var/log/test.txt"
    }
}

3.2、logstash配置参数案例
logstash配置文件参考:https://www.jianshu.com/p/25ed5ed46682
logstash参考2:https://www.aliyun.com/jiaocheng/topic_6490.html

(1) 配置文件1 nginx_access.conf
[root@jxq-c2-16-1 config]# cat nginx_access.conf 
input {                                                                                     #input表示准备从哪里读取日志到logstsh
    file {
    type => "nginx-access"                                                       #日志类型,自定义
    path => "/alidata/nginx/logs/access.log"                             #指定读取日志的路径
    }
}

filter {                                                                                        #filter表示将要过滤日志中的哪些内容
    date {                                                                                    #时间字段
          match => ["time", "yyyy-MM-dd HH:mm:ss,SSS"]          #将日志中的时间字段转换成logstash的时间字段
    }
}

output {                                                                                     #表示将过滤后的日志内容输出到哪里
    stdout {                                                                                 #表示输出到屏幕
        codec => rubydebug                                                        #用于调试
    }

    elasticsearch {                                                                     #表示输出到elasticsearch服务器
        index => "nginx_access_10.1.1.10-%{+yyyy.MM.dd}"    #并建立索引名称,kibana创建索引的时候就添加这个名字,会按时间每天生成索引,方便后续删除
        hosts => ["10.1.2.200:9200"]                                           #指定elasticsearch服务器地址
        user => "elastic"
        password => "wenqiang123"
    }
}


(2) 配置文件2 nginx_error.conf
[root@jxq-c2-16-1 config]# cat nginx_error.conf 
input {
    file {
    path => "/alidata/nginx/logs/error.log"                 #error日志路径
    }
}

filter {
        
date {  
          match => ["time", "yyyy-MM-dd HH:mm:ss,SSS"]
    }
}

output {
    stdout {
        codec => rubydebug
    }

    elasticsearch {
        index => "nginx_error_10.1.1.10-%{+yyyy.MM.dd}"                 #索引名字,kibana创建索引的时候添加这个名字
        hosts => ["10.1.2.200:9200"]
    }
}

注意:如果日志里面没有任何东西正在写入,那么es将无法抓取logstash的动态,kibana也无法识别到es的索引,这时需要手动往日志里写点东西进去

4、启动logstash

(0) 测试logstash配置文件
# /usr/local/logstash-5.3.1/bin/logstash  -t  -f   /usr/local/logstash-5.3.1/config/logstash.conf 
Configuration OK
-t 可以测试配置文件是否配置正常

(1) 普通启动
# /usr/local/logstash-5.3.1/bin/logstash -f /usr/local/logstash-5.3.1/config/logstash.conf  -l /var/log/logstash/
-f 表示指定logstash配置文件
-l 表示生成并指定logstash日志存放目录

(1.1)查看进程
[root@localhost logstash]# netstat -npult|grep 9600
tcp 0 0 ::ffff:127.0.0.1:9600 :::* LISTEN 8080/java 

(2) 写入一些内容到日志文件,查看logstash启动界面是否有输出以下内容  
# echo "123456" >> /alidata/nginx/logs/access.log
{
          "host" => "localhost.localdomain",                 #表示从哪台主机输出的信息
      "@version" => "1",                                             #日志生成的版本号
       "message" => "123456",                                   #日志生成的主要内容
    "@timestamp" => 2019-01-04T07:54:08.222Z,   #日志生成的时间
          "path" => "/alidata/nginx/logs/access.log"         #日志路径
}

(3) 如果测试没问题,则后台启动
# nohup /usr/local/logstash-5.3.1/bin/logstash -f /usr/local/logstash-5.3.1/config/logstash.conf &
(注意:启动后会生成一个nohup.out的文件,这个文件需要每隔几个月清空一次 nohup.out是一个临时文件,elk需要到这里抓取数据,之后数据都会存在elk服务器上面,所以清空nohup.out不会影响elk正常访问,也不会导致数据丢失,更不会导致logstash无法采集数据)

三、安装Kibana-5.3.1

1、下载安装包

# wget https://artifacts.elastic.co/downloads/kibana/kibana-5.3.1-linux-x86_64.tar.gz
# tar zxvf kibana-5.3.1-linux-x86_64.tar.gz -C /usr/local/

2、配置kibana

# vi /usr/local/kibana-5.3.1-linux-x86_64/config/kibana.yml
server.port: 5601
server.host: "172.16.100.160"                                #监听本地ip
elasticsearch.url: http://172.16.100.160:9200        #指定连接elasticsearch的访问地址
kibana.index: ".kibana"                                          #用来保存es的索引、可视化和仪表盘,相当于kibana的数据库

elasticsearch.username: "user"                           #es的用户名和密码
elasticsearch.password: "pass"
# logging.verbose: false                                         #该选项改成true会记录kibana所有的系统日志,默认为false,建议调试kibana的时候再开启
# logging.dest: /application/kibana-5.3.1-linux-x86_64/logs/kibana.log  #该选项默认输出日志到屏幕,可以改成输出到指定位置

3、启动kibana

# chmod -R elk.elk  /usr/local/kibana-5.3.1-linux-x86_64
# su - elk
# nohup /usr/local/kibana-5.3.1-linux-x86_64/bin/kibana &

4、浏览器访问 http://172.16.100.160:5601

(1) 创建索引——索引名字根据logstash 里面的index来写
[root@localhost ~]# vi /usr/local/logstash-5.3.1/config/test.conf
index => "test_%{+YYYY.MM.dd}"(最好写成test_*)

在这里插入图片描述

@timestamp此处必须选上要不然看不到时间

(2) 写一些内容到测试文件
[root@localhost ~]# echo "123456" >> /var/log/test.log 
[root@localhost ~]# echo "123456" >> /var/log/test.log 
[root@localhost ~]# echo "123456" >> /var/log/test.log 
[root@localhost ~]# echo "123456" >> /var/log/test.log 
[root@localhost ~]# echo "123456" >> /var/log/test.log 
[root@localhost ~]# echo "123456" >> /var/log/test.log 
[root@localhost ~]# echo "123456" >> /var/log/test.log 
[root@localhost ~]# echo "123456" >> /var/log/test.log 
[root@localhost ~]# echo "123456.apk" >> /var/log/test.log 
[root@localhost ~]# echo "123456.apk" >> /var/log/test.log 
(3) 选择Discover进程日志搜索

在这里插入图片描述
4.1、设置systemctl启动kibana

# cat  /lib/systemd/system/kibana.service 
[Unit]
Description=kibana
Wants=network-online.target
After=network-online.target

[Service]
EnvironmentFile=/home/soft/kibana-7.12.0-linux-x86_64/config/kibana.yml
WorkingDirectory=/home/soft/kibana-7.12.0-linux-x86_64
User=elk
Group=elk
ExecStart=/home/soft/kibana-7.12.0-linux-x86_64/bin/kibana
StandardOutput=journal
StandardError=inherit
LimitNOFILE=100000
LimitNPROC=100000
TimeoutStopSec=0
KillSignal=SIGTERM
SendSIGKILL=no
KillMode=process
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

# chmod +x  /lib/systemd/system/kibana.service 
# chmod +x  /lib/systemd/system/kibana.service
# systemctl daemon-reload
# systemctl start kibana

5、为Kibana配置登录认证 (通过nginx访问Kibana实现提示用户输入用户名密码)(如果前面elasticsearch设置了密码这里就不用了为kibana配置密码了)

1、pcre-8.12
pcre 安装到 /usr/local/ 解包到/usr/src/

# tar zxvf pcre-8.12.tar.gz -C /usr/src/
# cd /usr/src/pcre-8.12/
# ./configure --prefix=/usr/local/   
make  &&  make install

2、nginx-1.11.13

# useradd nginx -s /sbin/nologin -M
# tar zxvf nginx-1.11.13.tar.gz -C /usr/local/
# cd /usr/local/nginx-1.11.13/
# ./configure --prefix=/alidata/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_flv_module --with-http_mp4_module --with-pcre=/usr/src/pcre-8.12/
# make && make install

3、添加一个单独的nginx配置文件,设置转发

# mkdir -pv /usr/local/nginx/conf/conf.d/
# vim /usr/local/nginx/conf/conf.d/kibana.conf
server {
    listen 8080;
    server_name 192.168.135.136;    #当前主机名
    auth_basic "Restricted Access";
    auth_basic_user_file /usr/local/nginx/conf/htpasswd.users;      #登录验证
    location / {
    proxy_pass http://192.168.135.136:5601;     #转发到kibana
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    }
}

4、修改nginx主配置文件导入配置(把主配置文件默认80那一大段注释掉)

# vim /usr/local/nginx/conf/nginx.conf 
include /usr/local/nginx/conf/conf.d/*.conf;

5、配置登录验证(可设置多个用户)

# htpasswd -bc /usr/local/nginx/conf/htpasswd.users admin admin (创建用户名和密码都,第一次需要加-c来创建文件)
# htpasswd -b /alidata/nginx/conf/htpasswd.users devlop  dev.ro123.com (第二次不要加-c,-c是创建文件用的)
# cat /usr/local/nginx/conf/htpasswd.users     #查看创建的用户名密码
admin:HbQcH7ctR9JpI
devlop:0or17BvYp5sOU

6、重启nginx

# /usr/local/nginx/sbin/nginx -t
# /usr/local/nginx/sbin/nginx -s reload

7、用浏览器直接访问80端口

http://192.168.135.136/

二、清除ELK索引文件

一、什么是索引

 索引文件就是es的数据库,也就是本地存储,它的配置文件在这里(默认被注释了,可以手动开启指定路径,默认路径在 /alidata/elasticsearch-5.3.1/data/nodes/)
[root@jxq-c2-16-2 elasticsearch-5.3.1]# cat /alidata/elasticsearch-5.3.1/config/elasticsearch.yml|grep path
#path.data: /path/to/data

二、删除索引文件,防止占用太大的磁盘空间(删除索引数据就没了,可以删除几个月之前的数据)

(1) 查看全部索引文件
# curl http://10.1.2.200:9200/_cat/indices?v
# curl -u "elastic:Clouddeep@8890" http://127.0.0.1:9200/_cat/indices?v # 可以指定用户名密码
health status index                             uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   .kibana                           y__8shNETGiunYgF1GwToA   1   1          7            1     37.8kb         37.8kb
yellow open   apache_access_10.1.2.10           wSqWcaRhRDqYzIVZVYnCIQ   5   1     317850            0    149.7mb        149.7mb
yellow open   apache_access_10.1.10.10          XEyh5y7SR6eVeYd4vDmHaQ   5   1          2            0     12.1kb         12.1kb
yellow open   nginx_access_10.1.1.10-2017.07.28 9AUaIylWQQSD-2IPQ02WjA   5   1      55837            0     27.2mb         27.2mb
yellow open   apache_error_10.1.2.11            tBEkhE-oTS-Rvdcfh9_-Rg   5   1       6903            0      3.3mb          3.3mb
yellow open   nginx_error_10.1.1.10-2017.07.27  aiStUUWAS7CSPiZcfynlZQ   5   1          1            0        6kb            6kb
yellow open   nginx_access_10.1.1.10-2017.07.27 hzMxMzNxTBCdDUgsXSIY7Q   5   1    1310377            0    582.8mb        582.8mb
yellow open   apache_error_10.1.2.10            9stFDP-qTqiTxy1ys8Ziow   5   1       7290            0      4.2mb          4.2mb
yellow open   apache_access_10.1.2.11

# 查详细索引
curl -u "elastic:Clouddeep@8890" http://127.0.0.1:9200/ueba_20220523/doc/_search

#nginx_access_10.1.1.10-2017.07.27   后面的是时间,是因为之前定义过了【index => "nginx_access_10.1.1.10-%{+yyyy.MM.dd}"  】,这里会按天生成索引
store.size 和 pri.store.size  是索引大小(kb mb gb)

(2) 对应的索引目录
[root@jxq-c2-16-2 data]# ll /alidata/elasticsearch-5.3.1/data/nodes/0/indices/


(3) 删除某天或某月的索引数据(根据【curl http://10.1.2.200:9200/_cat/indices?v】查看到的名字来删除,其实就是logstash里面记录的index 【index => "nginx_access_10.1.1.10-%{+yyyy.MM.dd}"】)

curl -XDELETE http://10.1.2.200:9200/nginx_access_10.1.1.10-2017-07-27   #删除2017-07-27号的nginx_access的所有数据
curl -XDELETE http://10.1.2.200:9200/*2017-07-*                          #删除2017-07月的所有数据   推荐:当占用磁盘空间太大时手动删除前几个月的 推荐手动删除

curl -XDELETE http://10.1.2.200:9200/nginx_access_10.1.1.10-2017-07-*    #删除7月的nginx_access数据(索引)   
curl -u "elastic:wenqiang123" -XDELETE http://10.4.7.10:9200/filebeat-7.12.0-2021.03.25-000001


(4) 通过脚本定期删除索引
# 删除某个月的
[root@jxq-c2-16-2 elk]# cat delete_index.sh 
#!/bin/bash
#当磁盘根分区使用率大于80%删除两个月以前的ELK索引数据

#disk size
Disk_size=`df -h|sed -n '2p'|awk '{print $5}'|awk  -F "%" '{print $1}'`

#TIME
Time=`date --date "60 days ago" +%Y.%m`

#COMMOND
if [ $Disk_size -gt 80 ];then

    curl -XDELETE http://10.1.2.200:9200/*-${Time}.*

    if [ $? -eq 0 ];then

        echo -e "\nclear elk ok!"

    else

        echo "clear elk have a  error!"
    fi

fi

# 每天都是删除29天前的那一天数据(这里只删一天的数据,所以需要手动把29天前的数据先删掉)
#elkdelete
59 23 * * * root /bin/sh /project/redcore/tools/elkdelete.sh
# cat /project/redcore/tools/elkdelete.sh
#!/bin/bash
LAST_DATA=`date -d "-29 days" "+%Y%m%d"`
LAST_DATA_sdp=`date -d "-29 days" "+%Y.%m.%d"`
curl -u "elastic:Clouddeep@8890" -XDELETE http://127.0.0.1:9200/ueba_${LAST_DATA}
curl -u "elastic:Clouddeep@8890" -XDELETE http://127.0.0.1:9200/sdp-${LAST_DATA_sdp}


(5) 删除所有索引数据 (隐患:删除后需要KIbana再次重新采集数据,不推荐)
curl -XDELETE http://10.1.2.200:9200/*

(6) 最好用的推荐手动删除
curl -XDELETE http://10.1.2.200:9200/*-2017.07.*    // 删除2017-07月的所有数据   推荐:当占用磁盘空间太大时手动删除前几个月的 
Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐