容器化安装环境EFK搭建

容器化安装环境

Docker中安装并启动ElasticSearch

前置配置

第一步:在宿主机上执行echo “net.ipv4.ip_forward=1” >>/usr/lib/sysctl.d/00-system.conf

2.第二步:重启network和docker服务
[root@localhost /]# systemctl restart network && systemctl restart docker

安装ElasticSearch

1.下载镜像

docker pull elasticsearch:7.6.2

2.创建挂载的目录

mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
mkdir -p /mydata/elasticsearch/plugins
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml

3.创建容器并启动

chmod -R 777 /mydata/elasticsearch/data /mydata/elasticsearch/config /mydata/elasticsearch/plugins

docker run --name elasticsearch -p 9200:9200  -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms84m -Xmx512m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.6.2

其中elasticsearch.yml是挂载的配置文件,data是挂载的数据,plugins是es的插件,如ik,而数据挂载需要权限,需要设置data文件的权限为可读可写,需要下边的指令。
chmod -R 777 要修改的路径

-e "discovery.type=single-node" 设置为单节点
特别注意:
-e ES_JAVA_OPTS="-Xms256m -Xmx256m" \ 测试环境下,设置ES的初始内存和最大内存,否则导致过大启动不了ES

访问查看
在这里插入图片描述

4.修改配置

进入容器&打开文件

docker exec -it elasticsearch bash
cd config
vi elasticsearch.yml

进入config目录里创建elasticsearch.yml文件,并使用vi命令插入如下内容:

http.host: 0.0.0.0

5.重启es并设置密码

配置x-pack 不然会报错

  1. 进入

    docker exec -it elasticsearch bash
    

    目录,执行以下命令:

    ./bin/elasticsearch-setup-passwords interactive
    
  2. 会出现以下错误信息:

    Unexpected response code [500] from calling GET http://127.0.0.1:9200/_security/_authenticate?pretty  
    It doesn't look like the X-Pack security feature is enabled on this Elasticsearch node.
    Please check if you have enabled X-Pack security in your elasticsearch.yml configuration file.
    
  3. 我们需要配置文件中开启x-pack验证,修改

    config/elasticsearch.yml
    

    配置文件,在尾部添加以下内容,然后重启elasticsearch:

    xpack.security.enabled: true
    
    ./bin/elasticsearch -d
    
  4. 重复第1步,为elasticapm_systemkibanalogstash_systembeats_systemremote_monitoring_user设置密码,这里我设置了统一密码:123456,具体操作:

cd bin
elasticsearch-setup-passwords interactive
// 输出
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
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 127.0.0.1:9200

{
  "error": {
    "root_cause": [
      {
        "type": "security_exception",
        "reason": "missing authentication credentials for REST request [/]",
        "header": {
          "WWW-Authenticate": "Basic realm=\"security\" charset=\"UTF-8\""
        }
      }
    ],
    "type": "security_exception",
    "reason": "missing authentication credentials for REST request [/]",
    "header": {
      "WWW-Authenticate": "Basic realm=\"security\" charset=\"UTF-8\""
    }
  },
  "status": 401
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QMh0KUIX-1690629954044)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230728222331492.png)]

6.CURL密码访问Elasticsearch

curl -u elastic:123456 127.0.0.1:9200
# 或者
curl -u elastic 127.0.0.1:9200
Enter host password for user 'elastic': 123456

成功打印:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S02ZiQAk-1690629954044)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230728222634939.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fn5OOxtx-1690629954046)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230728222840197.png)]

安装 elasticsearch-head

此时如果想查看es的服务是否启动正常,还可以基于docker来安装es的插件。过程基本一样,先docker去拉取插件,然后docker运行容器:

 docker pull mobz/elasticsearch-head:5

执行docker命令后,也可以使用docker ps -a来查看是否成功启动。不过更好的方式是和es服务链接上。因此接下来首先需要修改es的config目录的配置文件elasticsearch.yml,在其后面增加两行语句:

http.cors.enabled: true   
http.cors.allow-origin: "*"

主要目的就是允许跨域请求。

由于修改了配置文件,所以需要重启一下es的服务。直接运行如下语句:

docker restart elasticsearch

到此就可以使用网页浏览器来查看es的运行状况了。打开一个浏览器,地址栏上输入安装es插件的服务器ip地址和其端口号:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IiSVlM5b-1690629954046)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729123550710.png)]

安装Kibana

7.6版本Kibana启动 参数 ELASTICSEARCH_URL

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vfn99aQ6-1690629954047)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230728215000421.png)]

docker pull kibana:7.6.2

docker run --name kibana -e ELASTICSEARCH_HOSTS=http://自己的IP地址:9200 -p 5601:5601 -d kibana:7.6.2
//docker run --name kibana -e ELASTICSEARCH_URL=http://自己的IP地址:9200 -p 5601:5601 -d kibana:7.6.2

或者 

docker run --name kibana -d --link YOUR_ELASTICSEARCH_CONTAINER_NAME_OR_ID:elasticsearch -p 5601:5601 kibana:7.6.2
YOUR_ELASTICSEARCH_CONTAINER_NAME_OR_ID:Elasticsearch容器的名字或容器ID

修改配置

1、进入容器&打开文件

docker exec -it kibana bash
cd config
vi kibana.yml

2、编辑文件

IpAddress:docker inspect es查看es容器内部的ip地址 (link启动容器需要查看)

server.name: kibana
server.host: "0.0.0.0"
elasticsearch.hosts: [ "http://192.168.59.139:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
elasticsearch.username: "elastic"
elasticsearch.password: "123456"
i18n.locale: "zh-CN"

3、退出&重启

exit
docker restart kibana

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W81x5PRL-1690629954048)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230728230020037.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9BJUnFQB-1690629954048)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230728215146378.png)]

然后访问页面
http://自己的IP地址:5601/app/kibana

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gEOwfk6E-1690629954049)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230728225732152.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gx1DKQhx-1690629954050)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230728225920623.png)]

kibana操作ElasticSearch

文档操作

1. _cat
GET /_cat/node 查看所有节点
GET /_cat/health 查看es健康状况
GET /_cat/master 查看主节点
GET /_cat/indices 查看所有索引

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-neHMiQEE-1690629954050)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729161116597.png)]

2. 保存文档

保存一个数据,保存在那个索引的那个类型下,指定用唯一的标识,customer为索引,external为类型,1为标识。其中PUT和POST都可以,POST新增。如果不指定ID,会自动生成ID,指定ID就会修改这个数据,并新增版本号。PUT可以新增可以修改,PUT必须指定ID,一般都用来修改操作,不指定ID会报错。

PUT customer/external/1
{
  "name":"张三"
}

返回结果
{
  "_index" : "customer",
  "_type" : "external",
  "_id" : "1",
  "_version" : 3,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 1001,
  "_primary_term" : 2
}
3. 查询文档
GET customer/external/1
    
结果:
{
  "_index" : "customer", //在那个索引
  "_type" : "external", //在那个类型
  "_id" : "1", //记录ID
  "_version" : 1, //版本号
  "_seq_no" : 0, //并发控制字段,每次更新就+1,可用于乐观锁
  "_primary_term" : 1, //主分片重新分配,如重启,就会变化
  "found" : true, //true就是找到数据了
  "_source" : { //数据
    "name" : "张三"
  }
}
4. 更新文档
POST操作带_update会对比原来的数据,如果是一样的那就不会更新了
POST customer/external/1/_update
{
  "doc":{
    "name":"你好"
  }
}
POST操作不带_update会直接更新操作
POST customer/external/1
{
  "name":"你好"
}
5. 删除文档
DELETE customer/external/1

安装FileBeat

拉取 镜像

docker  pull elastic/filebeat:7.6.2

拉取完成之后,先不着急启动,在启动之前需要完成先建立一份映射的配置文filebeat.docker.yml,选择目录创建filebeat.docker.yml

#=========================== Filebeat inputs ==============
filebeat.inputs:
- input_type: log
  enable: true
  paths:  # 采集日志的路径这里是容器内的path
   - /usr/share/filebeat/logs/*.log
  multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
  multiline.negate: true
  multiline.match: after
  multiline.timeout: 10s
  # 为每个项目标识,或者分组,可区分不同格式的日志
  tags: ["pre-logs"]
  # 这个文件记录日志读取的位置,如果容器重启,可以从记录的位置开始取日志
  registry_file: /usr/share/filebeat/data/
  fields:
    logsource: node1
    logtype: pre

#-------------------------- Elasticsearch output ---------
output.elasticsearch:
    hosts: ["http://192.168.59.139:9200"]

为什么不直接去filbeat容器里面去改配置文件呢?因为filebeat容器的配置文件是只读的不可更改,所以只能通过映射配置文件的方式修改。

docker run --user=root -d \
-v /home/filebeat/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml \
-v /home/logs:/usr/share/filebeat/logs \
-v /home/data:/usr/share/filebeat/data \
--link elasticsearch \
--link kibana  \
--name filebeat    elastic/filebeat:7.6.2
docker run --name filebeat -d --user root \
-v /Users/lihaodong/Desktop/log:/usr/share/filebeat/logs \
-v /usr/local/src/elk/filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml \
-v /usr/local/src/elk/filebeat/data:/usr/share/filebeat/data \
docker.elastic.co/beats/filebeat:7.6.2

建立好配置文件之后,启动filebeat容器

docker run --user=root -d \
-v /home/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml \
-v /home/logs:/usr/share/filebeat/logs \
-v /home/data:/usr/share/filebeat/data \
--link elasticsearch \
--link kibana  \
--name filebeat  elastic/filebeat:7.6.2
docker run --name filebeat -d --user root \
-v /Users/lihaodong/Desktop/log:/usr/share/filebeat/logs \
-v /usr/local/src/elk/filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml \
-v /usr/local/src/elk/filebeat/data:/usr/share/filebeat/data \
docker.elastic.co/beats/filebeat:7.6.2

这里 -v 就是挂载目录的意思就是将自己本地的目录挂载到容器当中,第一个挂载映射的是配置文件,第二个是要收集的日志目录,如果不挂载日志目录的话,filebeat是不会收集日志的,因为在容器里面根本找不到要收集的路径。–user=root 指定启动用户,因为读取文件可能没有权限,link起的别名等信息可以在同一网络中通过别名访问。

docker run --name filebeat -d --user root \
-v /Users/lihaodong/Desktop/log:/usr/share/filebeat/logs \
-v /usr/local/src/elk/filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml \
-v /usr/local/src/elk/filebeat/data:/usr/share/filebeat/data \
docker.elastic.co/beats/filebeat:7.6.2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9yJ6qKCh-1690629954051)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729143255435.png)]

可以看到filebeat已经成功启动了,如果启动失败的话可以看filebeat的配置文件es和kibana的host是否正确。

在收集日志的目录下面添加日志文件,或者更新日志,然后去kibana查看是否有filebeat的索引生成(必须是添加或者更新日志,原有的数据不会同步)。

手动创建模拟下,可以看到被filebeat加载收集了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iKs3GaiS-1690629954052)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729141059774.png)]

通过elasticsearch-head查看日志索引状态

在这里插入图片描述

Kibana中可以看到已经有生成了索引并且有数据了,在Discover查看具体数据

注意:参考下一节内容预先配置下索引

在这里插入图片描述

参考: 配置filebeat.yml文件

#============================== Kibana =====================================

# Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API.
# This requires a Kibana endpoint configuration.
setup.kibana:

  # Kibana Host
  # Scheme and port can be left out and will be set to the default (http and 5601)
  # In case you specify and additional path, the scheme is required: http://localhost:5601/path
  # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601
  host: "192.168.110.130:5601"  #指定kibana
  username: "elastic"   #用户
  password: "${ES_PWD}"  #密码,这里使用了keystore,防止明文密码

  # Kibana Space ID
  # ID of the Kibana Space into which the dashboards should be loaded. By default,
  # the Default Space will be used.
  #space.id:

#================================ Outputs =====================================

# Configure what output to use when sending the data collected by the beat.

#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["192.168.110.130:9200","192.168.110.131:9200"]

  # Protocol - either `http` (default) or `https`.
  #protocol: "https"

  # Authentication credentials - either API key or username/password.
  #api_key: "id:api_key"
  username: "elastic"  #es的用户
  password: "${ES_PWD}" # es的密码
  #这里不能指定index,因为我没有配置模板,会自动生成一个名为filebeat-%{[beat.version]}-%{+yyyy.MM.dd}的索引

简单介绍如何配置索引

在Kibana中配置索引

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-46fzLZR8-1690629954053)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729134437175.png)]

配置筛选字段 这里按照时间

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oUojWREy-1690629954054)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729134607496.png)]

创建成功了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y1Jh8aRY-1690629954055)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729134727148.png)]

查看最终索引数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0N85yCKJ-1690629954055)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729134908936.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z5iQQ7BH-1690629954056)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729135040590.png)]

模拟手动添加日志 查看控制台实时采集了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PjlNhHg6-1690629954056)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729135903199.png)]

我们到Kibana里查询下 可以看到最终的日志信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LYw4sBjP-1690629954057)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729141619481.png)]

可以通过搜索或者日期筛选,字段筛选,等等各种操作查看你需要的日志信息。或者可以在 日志目录下 查看日志

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XwQjKMfs-1690629954057)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729143618408.png)]

Kibana基本操作

清理配置的索引数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cW9kqEko-1690629954058)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729150317075.png)]

日志可视化

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mBiIINzI-1690629954058)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729151230595.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ICcYfhdn-1690629954059)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729151300902.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZnooMAeJ-1690629954059)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729151322305.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fPVBUvFF-1690629954060)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729151431138.png)]

保存这个视图,并加入仪表盘中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iWkxRv0K-1690629954060)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729152040699.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BS2hS2pe-1690629954061)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729152058283.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7cEKzyww-1690629954061)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729152232717.png)]

实战练习

  1. 通过rsyslog收集本机所有日志
  2. 通过filebeat收集日志,给到elasticsearch
  3. Elasticsearch分析日志
  4. Elasticsearch将分析结果给到kibana
通过rsyslog收集本机所有日志

先安装rsyslog,yum -y install rsyslog

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N8OV6dda-1690629954062)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729152455284.png)]

然后修改配置文件

修改配置文件
[root@VM-20-10-centos ~]# vim /etc/rsyslog.conf
解封2行
module(load="imudp") # needs to be done just once
input(type="imudp" port="514")
新增一行
# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
#以下为新增,即将所有日志都收集到一个文件
*.*                                                     /var/log/baism.log

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qsXKnqSc-1690629954062)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729152646371.png)]

最后启动rsyslog

systemctl restart rsyslog

查询下看看

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TYBKtVJx-1690629954063)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729153003394.png)]

利用之前的搭建好的filebeat,rsyslog会不断追加日志信息到 - /var/log/baism.log

docker run --name filebeat2 -d --user root \
-v /var/log:/usr/share/filebeat/logs \
-v /usr/local/src/elk/filebeat2/config/filebeat.yml:/usr/share/filebeat/filebeat.yml \
-v /usr/local/src/elk/filebeat2/data:/usr/share/filebeat/data \
docker.elastic.co/beats/filebeat:7.6.2

启动容器化开始收集日志文件中的数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W7GFnoKT-1690629954064)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729173013346.png)]

打开浏览器重新查看,此时 elasticsearch-head更新索引 发现新增索引

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dCSjOWSH-1690629954064)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729162500014.png)]

对应的Kibana也会更新 新增了索引 我配置下新增的索引即可查看系统日志

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IkrmKSFn-1690629954065)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729162642073.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gor1lcHU-1690629954066)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729162855062.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yefnSagL-1690629954066)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729163009254.png)]

查看日志数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fi6Mhydf-1690629954066)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729172626038.png)]

目前默认收集路径是容器内的 /usr/share/filebeat/logs 文件夹

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-recMvkLk-1690629954067)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729172738432.png)]

如果有不同文件夹 可以分开收集吗?大家可以试试

启动后进入容器创建syslog文件夹 用于存放系统日志文件

docker exec -it filebeat3 bash
/usr/share/filebeat/logs
mkdir  syslog 

那么启动容器的命令改为

docker run --name filebeat3 -d --user root \
-v /home/logs:/usr/share/filebeat/logs/syslog \
-v /usr/local/src/elk/filebeat3/config/filebeat.yml:/usr/share/filebeat/filebeat.yml \
-v /usr/local/src/elk/filebeat3/data:/usr/share/filebeat/data \
docker.elastic.co/beats/filebeat:7.6.2

信息采集模板改为

filebeat.inputs:
- input_type: log
  enable: true
  paths:  # 采集日志的路径这里是容器内的path 
   - /usr/share/filebeat/logs/syslog/*.log
  multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
  multiline.negate: true
  multiline.match: after
  multiline.timeout: 10s
  # 为每个项目标识,或者分组,可区分不同格式的日志
  tags: ["pre-logs3"]
  # 这个文件记录日志读取的位置,如果容器重启,可以从记录的位置开始取日志
  registry_file: /usr/share/filebeat/data/
  fields:
    logsource: node1
    logtype: pre

#-------------------------- Elasticsearch output ---------
output.elasticsearch:
    hosts: ["http://192.168.59.139:9200"]

最终验证结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gZ27rqzv-1690629954068)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729183248733.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-10os2AXG-1690629954068)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729183426303.png)]

看着似乎可以 ,其实不行 关键看看这里

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2qDuVp0J-1690629954069)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729185808221.png)]

rest-high-level-client整合ElasticSearch

1.导入依赖

		<!-- 修改springboot默认整合的es的版本 -->
        <properties>
            <java.version>1.8</java.version>
            <elasticsearch.version>7.6.2</elasticsearch.version>
        </properties>
    
        <!-- elasticsearch-rest-high-level-client -->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.6.2</version>
        </dependency>
        
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.68</version>
        </dependency>

2.编写配置类

@Configuration
public class ElasticSearchClientConfig {
    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("自己的IP地址", 9200, "http")
                )
        );
        return client;
    }
}

3.进行es的索引操作

@Autowired
    @Qualifier("restHighLevelClient")
    private RestHighLevelClient client;
    //index名字,静态一般都是放在另一个类中的
    public static final String ES_INDEX="han_index";

    //创建索引
    @Test
    public void createIndex() throws IOException {
        //1. 创建索引
        CreateIndexRequest index = new CreateIndexRequest(ES_INDEX);
        //2. 客户端执行请求,请求后获得相应
        CreateIndexResponse response = client.indices().create(index, RequestOptions.DEFAULT);
        //3.打印结果
        System.out.println(response.toString());
    }
    //测试索引是否存在
    @Test
    public void exitIndex() throws IOException{
        //1.
        GetIndexRequest request = new GetIndexRequest(ES_INDEX);
        boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
        System.out.println("是否存在"+exists);
    }
    //删除索引
    @Test
    public void deleteIndex() throws IOException{
        DeleteIndexRequest request = new DeleteIndexRequest(ES_INDEX);
        AcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT);
        System.out.println("是否删除"+response);
    }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ESEWWtfU-1690629954070)(C:\Users\Gary\AppData\Roaming\Typora\typora-user-images\image-20230729175834562.png)]

4.es的文档操作

 @Autowired
    @Qualifier("restHighLevelClient")
    private RestHighLevelClient client;

    public static final String ES_INDEX="han_index";

    //创建文档
    @Test
    public void createDocument() throws IOException {
        //创建对象
        UserInfo userInfo = new UserInfo("张三",12);
        //创建请求
        IndexRequest request = new IndexRequest(ES_INDEX);
        //规则
        request.id("1").timeout(TimeValue.timeValueSeconds(1));
        //将数据放到请求中
        request.source(JSON.toJSONString(userInfo), XContentType.JSON);
        //客户端发送请求,获取相应的结果
        IndexResponse response = client.index(request, RequestOptions.DEFAULT);
        //打印一下
        System.out.println(response.toString());
        System.out.println(response.status());
    }

    //判断是否存在
    @Test
    public void exitDocument() throws IOException {
        GetRequest request = new GetRequest(ES_INDEX, "1");
        //不获取返回的_source 的上下文
        request.fetchSourceContext(new FetchSourceContext(false));
        request.storedFields("_none");

        boolean exists = client.exists(request, RequestOptions.DEFAULT);
        System.out.println(exists);
    }

    //获取文档信息
    @Test
    public void getDocument() throws IOException {
        GetRequest request = new GetRequest(ES_INDEX, "1");
        GetResponse response = client.get(request, RequestOptions.DEFAULT);
        System.out.println("获取到的结果"+response.getSourceAsString());
    }

    //更新文档
    @Test
    public void updateDocument() throws IOException {
        //创建对象
        UserInfo userInfo = new UserInfo("李四",12);

        UpdateRequest request = new UpdateRequest(ES_INDEX, "1");
        request.timeout("1s");

        request.doc(JSON.toJSONString(userInfo),XContentType.JSON);
        UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
        System.out.println(response.status());
    }

    //删除文档
    @Test
    public void deleteDocument() throws IOException{
        DeleteRequest request = new DeleteRequest(ES_INDEX, "1");
        request.timeout("1s");

        DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
        System.out.println(response.status());
    }

    //批量添加
    @Test
    public void bulkDocument() throws IOException{
        BulkRequest request = new BulkRequest();
        request.timeout("10s");

        ArrayList<UserInfo> userInfos = new ArrayList<>();
        userInfos.add(new UserInfo("李四",1));
        userInfos.add(new UserInfo("李四",2));
        userInfos.add(new UserInfo("李四",3));
        userInfos.add(new UserInfo("李四",4));
        userInfos.add(new UserInfo("李四",5));
        userInfos.add(new UserInfo("李四",6));
        userInfos.add(new UserInfo("李四",7));

        //进行批处理请求
        for (int i = 0; i <userInfos.size() ; i++) {
            request.add(
                    new IndexRequest(ES_INDEX)
                    .id(""+(i+1))
                    .source(JSON.toJSONString(userInfos.get(i)),XContentType.JSON));
        }

        BulkResponse response = client.bulk(request, RequestOptions.DEFAULT);
        System.out.println(response.hasFailures());
    }

    //查询
    @Test
    public void SearchDocument() throws IOException{
        SearchRequest request = new SearchRequest(ES_INDEX);
        //构建搜索条件
        SearchSourceBuilder builder = new SearchSourceBuilder();

        //查询条件使用QueryBuilders工具来实现
        //QueryBuilders.termQuery 精准查询
        //QueryBuilders.matchAllQuery() 匹配全部
        MatchQueryBuilder matchQuery = QueryBuilders.matchQuery("name", "李四");
        builder.query(matchQuery);
        builder.timeout(new TimeValue(60, TimeUnit.SECONDS));

        request.source(builder);

        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        System.out.println("查询出的结果"+JSON.toJSONString(response.getHits()));
    }

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/56234.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于量子同态的安全多方量子求和加密

摘要安全多方计算在经典密码学中一直扮演着重要的角色。量子同态加密(QHE)可以在不解密的情况下对加密数据进行计算。目前&#xff0c;大多数协议使用半诚实的第三方(TP)来保护参与者的秘密。我们使用量子同态加密方案代替TP来保护各方的隐私。在量子同态加密的基础上&#xff…

一些高频的C++ cache line面试

C那些事之False Sharing与Cache line 最近看到一段代码&#xff0c;手动做的对齐&#xff0c;于是研究一下不对齐又会带来什么影响&#xff1f; template <typename T> class AtomicWithPadding {private:static constexpr int kCacheLineSize 64;uint8_t padding_befor…

某公共资源交易平台headers逆向

某公共资源交易平台headers逆向 声明逆向目标:寻找加密位置X-Dgi-Req-Nonce和X-Dgi-Req-Timestamp加密分析X-Dgi-Req-Signature加密分析声明 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果…

StarRocks数据库部署全记录(保姆式帮助你初次体验StarRocks)

因业务需要&#xff0c;特此了解StarRocks产品和部署。 接触过程中发现指导资料很稀少&#xff0c;本人将结合官方的手册其他开源博主指导&#xff0c;将第一次接触到的概念和部署流程梳理&#xff0c;得出本文。 已有的资源中对细节介绍欠缺&#xff0c;导致我本人整个过程中花…

JavaWeb+jsp+Tomcat的叮当书城项目

点击以下链接获取源码&#xff1a; https://download.csdn.net/download/qq_64505944/88123111?spm1001.2014.3001.5503 技术&#xff1a;ssm jsp JDK1.8 MySQL5.7 Tomcat8.3 源码数据库课程设计 功能&#xff1a;管理员与普通用户和超级管理员三个角色&#xff0c;管理员可…

Java 解析Excel单元格的富文本

1. 总体介绍 该方法是解析 xlsx 单元格中的富文本&#xff0c;注意不是 xls&#xff0c;xls 的 api 不一样&#xff0c;试了很久没成功。只实现了解析 斜体字、上下标&#xff0c;其它的实现方式应该类似。 2. 具体实现 2.1 代码 package util;import java.io.FileInputStr…

Mac 终端快捷键设置:如何给 Mac 中的 Terminal 设置 Ctrl+Alt+T 快捷键快速启动

Mac 电脑中正常是没有直接打开终端命令行的快捷键指令的&#xff0c;但可以通过 commandspace 打开聚焦搜索&#xff0c;然后输入 ter 或者 terminal 全拼打开。但习惯了 linux 的同学会觉得这个操作很别扭。于是我们希望能通过键盘按键直接打开。 操作流程如下&#xff1a; 1…

ChatGPT在法律行业的市场潜力

​ChatGPT现在已经成为我们的文字生成辅助工具、搜索引擎助手&#xff0c;许多体验过它的朋友会发现对它越来越依赖&#xff0c;并将其逐渐融入到自己的日常工作、生活。但有一点值得注意&#xff1a;这种人工智能除了技术可行、经济价值可行还要与相关规范即人类普遍的价值观念…

Blazor前后端框架Known-V1.2.9

V1.2.9 Known是基于C#和Blazor开发的前后端分离快速开发框架&#xff0c;开箱即用&#xff0c;跨平台&#xff0c;一处代码&#xff0c;多处运行。 Gitee&#xff1a; https://gitee.com/known/KnownGithub&#xff1a;https://github.com/known/Known 概述 基于C#和Blazor…

DHCP地址池耗尽攻击

1&#xff09; 攻击DHCP服务器&#xff1a;频繁的发送伪装DHCP请求&#xff0c;直到将DHCP地址池资源耗尽防御&#xff1a;在交换机&#xff08;管理型&#xff09;的端口上做动态MAC地址绑定 2&#xff09; 伪装DHCP服务器攻击&#xff1a;hack通过将自己部署为DHCP服务器&…

【git技巧】什么是 .gitkeep

.gitkeep 文件的作用 就是——使 Git 保留一个空文件夹&#xff01; Git 是一个文件追踪系统&#xff0c;这也导致了 Git 的设计初衷是对文件进行追踪&#xff0c;所以&#xff0c;Git 不会追踪一个空目录。 但是&#xff0c;在某些情况下&#xff0c;我们确实是需要保留一些…

SSD 之乱七八糟的概念

1. 性能指标有哪些&#xff1f;分别是什么意思&#xff1f; 硬盘性能指标一般包括 IOPS&#xff08;反映的是随机读写性能&#xff09;、吞吐量&#xff08;也称为带宽&#xff0c;反映的是顺序读写性能&#xff09;、Response Time / Latency&#xff08;响应时间 / 时延&…

快手头部主播合体,二驴祁天道直播首秀销售额破亿

2023年刚刚过半&#xff0c;直播江湖突然生变。 快手头部娱乐主播「二驴」与快手户外主播第一人「祁天道」宣布“合体”&#xff0c;两者加总的粉丝量接近1亿&#xff0c;又一个“超级网红IP”诞生。 ▲图源&#xff1a;二驴的、祁天道快手截图 从白手起家的草根&#xff0c;…

机器学习 | Python实现NARX模型预测控制

机器学习 | Python实现NARX模型预测控制 目录 机器学习 | Python实现NARX模型预测控制效果一览基本介绍研究内容程序设计参考资料效果一览 基本介绍 机器学习 | Python实现NARX模型预测控制 研究内容 贝叶斯黑盒模型预测控制,基于具有外源输入的非线性自回归模型的预期自由能最…

arm neon/fpu/mfloat

neon官网介绍: Arm Neon technology is an advanced Single Instruction Multiple Data (SIMD) architecture extension for the A-profile and R-profile processors. Neon technology is a packed SIMD architecture. Neon registers are considered as vectors of elements …

UniPro助力金融企业数字化转型 强化项目协作与跟踪

根据一份来自Standish Group的研究报告&#xff08;"CHAOS Report"&#xff09;&#xff0c;该报告对美国各行业的项目进行了调查&#xff0c;结果显示仅有不到一半&#xff08;约44%&#xff09;的项目能够成功按时完成&#xff0c;并达到预期的业务目标。其中&…

支持中文创成式填充 AI版PS 2023 v25.0安装教程

抖音保姆级视频教程: https://v.douyin.com/iJdUjg2o/ PS 2023 v25.0安装包地址&#xff1a; 链接: https://pan.baidu.com/s/1PXgVHDHdMIRcDzV4IfGAQw?pwd2023 提取码: 2023 如有疑问请加交流请加QQ群&#xff1a;814894746 安装教程总结&#xff1a; 卸载之前的PS beta版…

GPTCache 悬赏令!寻找最佳捉虫猎手,豪华赏格等你来拿!

号外号外&#xff01;GPTCache 全宇宙寻找最佳捉虫猎手&#xff01;捉虫数量越多&#xff0c;奖品越丰厚&#xff01; GPTCache 是为 AIGC 应用搭建的全新缓存&#xff0c;典型的应用场景是大模型&#xff0c;它采用语义缓存技术&#xff0c;能够存储 LLM 响应&#xff0c;从而…

关于Linux启动后eth0网卡起不来的问题

1./etc/udev/rules.d/70-persistent-net.rules 先到这个文件中 将eth0注掉 ## 同时记录ADDR 2.mv /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth2 注意这个eth2, 要和第一步的号码对应 同时进入文件,将设备和ADDR修改 3.重启网络 servi…

既要增长又要人效,零售人准备好接受老板的灵魂拷问了吗

增长对于零售行业尤其中小规模的玩家来说重要性不言而喻&#xff0c;而支撑持续增长的引擎之一就是对日常运营数据能随时进行快速、合理的解读&#xff0c;从而在瞬息万变的市场环境和有限的时间窗口内&#xff0c;根据指标背后折射的问题及时调整市场投放和客户关系维护等策略…