ELK

发布时间 2023-11-24 10:29:53作者: Mr丶Yan

一、安装镜像

docker pull elasticsearch:7.2.0
docker pull mobz/elasticsearch-head:5
docker pull kibana:7.2.0
docker pull logstash:7.2.0

 

二、安装ElasticSearch

1.

docker run -d --restart=always --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.2.0

docker exec -it es /bin/bash

#进入配置文件夹
cd config

#修改配置文件
vi elasticsearch.yml

#加入跨域配置
http.cors.enabled: true
http.cors.allow-origin: "*"

#开启账户密码验证
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type

#设置密码
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

#保存一下然后
exit

#重新启动一下容器
docker restart es

 

2.进入elasticsearch容器内部进行密码设置

docker exec -it es /bin/bash

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

#退出容器
exit

#重新启动一下容器
docker restart es

 

注:elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user 密码最好设置一致避免后续忘记

3.浏览器直接访问http://ip:9200,会出现输入用户名、密码的弹窗,输入用户名:elastic 和  自己设置的密码 才能登录

登录之后显示

 4.修改密码

curl -H "Content-Type:application/json" -XPOST -u elastic 'http://ip:9200/_xpack/security/user/elastic/_password' -d '{ "password" : "test123" }'

或者

  • 进入容器修改elasticsearch.yml 配置文件将身份验证相关配置屏蔽掉;
  • 重启ES服务,查看下索引,发现多了一个.security-7索引,将其删除掉;
  • 这样ES就没有密码

 

5.访问   http://localhost:9100/?auth_user=elastic&auth_password=xxx  可查看elasticsearch

6.访问  http://localhost:9200/_cat/indices?v  可查看所有索引

 

 

三、ElasticSearch安装ik分次器

#进入容器
docker exec -it es /bin/bash

#进入 plugins目录
cd plugins/

#创建ik文件夹
mkdir ik

#若没有wget、unzip则需安装
yum -y install wget
yum -y install unzip zip

#进入ik目录
cd ik

#拉取elasticsearch-analysis-ik-7.2.0
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.2.0/elasticsearch-analysis-ik-7.2.0.zip

#解压elasticsearch-analysis-ik-7.2.0.zip
unzip elasticsearch-analysis-ik-7.2.0.zip

#移除elasticsearch-analysis-ik-7.2.0.zip
rm -f elasticsearch-analysis-ik-7.2.0.zip

#退出容器
exit 

#重新启动一下容器
docker restart es 

 

四、运行Head容器

docker run -d --restart=always  --name es_head -p 9100:9100 mobz/elasticsearch-head:5

 

五、运行 kibana 容器

# 进入容器
docker exec -it kibana /bin/bash

# 进入配置文件夹
cd config

# 修改配置文件
vi kibana.yml

# 修改elasticsearch连接(如果是本机部署,ip需填写内网ip)
elasticsearch.hosts: [ "http://elasticsearch的ip地址:9200" ]

# 加入中文配置(保存后重启kibana)
i18n.locale: "zh-CN"

# 设置elasticsearch用户名密码
elasticsearch.username: "elastic"
elasticsearch.password: "xxxx"

#保存之后,退出容器
exit

#重新启动一下容器
docker restart kibana
 

 

六、运行 LogStash 容器

docker run -d --restart=always --name logstash -p 5044:5044 -p 9600:9600 logstash:7.2.0

# 进入容器
docker exec -it logstash /bin/bash

# 修改 config 下的 logstash.yml 文件
vi config/logstash.yml

# 修改里面的IP地址,以及添加最后两行的elasticsearch的账号密码
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch的ip:9200" ]
elasticsearch.username: "elastic"
elasticsearch.password: "xxxx"


# 修改 pipeline 下的 logstash.conf 文件
vi pipeline/logstash.yml

# 修改内容如下
input {
  tcp {
    mode => "server"
    host => "0.0.0.0"  # 允许任意主机发送日志
    port => 5066
    codec => json_lines    # 数据格式
  }
}

output {
  elasticsearch {
      hosts  => ["http://192.168.12.58:9200"]   # ElasticSearch 的地址和端口(如果是本机部署,ip需填写内网ip)
      index  => "elk"         # 指定索引名
      codec  => "json"
      user  => "elastic"      # 账号
      password  => "xxx"      # 密码
  }
  stdout {
    codec => rubydebug
  }
}

#保存之后,退出容器
exit

#重新启动一下容器
docker restart logstash

 

七、扩展补充

1.elasticsearch-head无法创建索引的问题

将容器内的vendor.js拿出来。

docker cp es_head:/usr/src/app/_site/vendor.js D:\DockerFile\es_head\

然后修改D:\DockerFile\es_head\vendor.js。将6886行

contentType: "application/x-www-form-urlencoded

改成

contentType: "application/json;charset=UTF-8"

将7573行

var inspectData = s.contentType === "application/x-www-form-urlencoded" &&

修改为

var inspectData = s.contentType === "application/json;charset=UTF-8" &&

修改完之后在覆盖回去。

docker cp D:\DockerFile\es_head\vendor.js es_head:/usr/src/app/_site

然后重启es_head

docker restart es_head

2.windows 下logstash通过input收集日志配置

  1.  logstash导入的数据必须是es上已存在的索引,所以可以通过 es_head 自己先创建好索引。
  2. windows下文件目录写法问题,D:/PublishSpace/xxx  格式
  3. 文件读取位置不正确,读取一个已经存在内容的文件则需设置 start_position => "beginning"
  4. 日志中文乱码的问题 ,charset => "GB2312"
    input {
      file {
        path => ["D:/PublishSpace//logs/*.log"]
        start_position => "beginning"
        codec => plain {   # 设置读取编码
          charset => "GB2312"
        }
      }
    }
    output {
      elasticsearch {
          hosts  => ["http://192.168.12.58:9200"]   # ElasticSearch 的地址和端口(如果是本机部署,ip需填写内网ip)
          index  => "test"         # 指定索引名,没有需自己创建
          codec  => "json"
          user  => "elastic"      # 账号
          password  => "123456"      # 密码
      }
      stdout {
        codec => rubydebug
      }
    }