在CentOS 下 docker 安装 ELK

关于 ELK 相信大家都是有了解过了,这里就不赘述了,直接开始安装吧。

// 使用的 docker 镜像版本如下
elasticsearch:7.16.2

kibana:7.16.2

logstash:7.16.2

安装 ES

在本机上面创建文件夹,这里的文件夹可以大家自己定义,我是将docker 相关的放入如下的文件夹下:

// 创建文件夹,用于挂载 es 相关的文件
mkdir -p /apps/elk/es/{config,data,logs,plugins}

// 权限设置 docker中 elasticsearch 的用户 UID 是1000.
chown root:docker /apps/elk/es
或
chown -R 1000:1000 /data/elk/es

可以在docker 官方镜像中找到对应的版本。

拉取镜像

// 下载 docker 镜像
docker pull elasticsearch:7.16.2

具体步骤

第一步:启动容器

这一步的目的是为了将 elasticsearch 的配置文件 Copy 出来

// 先后根据对应的版本启动容器
docker run --name es -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 elasticsearch:7.7.1

// copy 配置文件到指定的宿主机上面去
docker cp es:/usr/share/elasticsearch/config/elasticsearch.yml /apps/elk/es/config/elasticsearch.yml

第二步:修改配置文件

// 修改配置文件
vi /apps/elk/es/config/elasticsearch.yml

// 文件里面的内容如下,注意 : 后面需要有空格
cluster.name: "docker-cluster"
network.host: 0.0.0.0
http.port: 9200

第三步:启动es容器

这里需要先将之前的 es 容器删除掉,重新启动一个容器

docker run -it -d -p 9200:9200 -p 9300:9300 \
-e ES_JAVA_OPTS="-Xms1g -Xmx1g" -e "discovery.type=single-node" \
-v /apps/elk/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /apps/elk/es/data:/usr/share/elasticsearch/data \
-v /apps/elk/es/logs:/usr/share/elasticsearch/logs \
-v /apps/elk/es/plugins:/usr/share/elasticsearch/plugins \
--restart=always \
--name es elasticsearch:7.7.1 

访问对应的服务地址

启动完成之后,可以通过浏览器访问下,看下容器是否可以访问,可以访问就表示没有问题了

ES 配置文件简单说明

# 配置的集群名称,默认是 elasticsearch,es 服务会通过广播方式自动连接在同一网段下的 es 服务,通过多播方式进行通信,
# 同一网段下可以有多个集群,通过集群名称这个属性来区分不同的集群。
cluster.name: elasticsearch

# 当前配置所在机器的节点名,你不设置就默认随机指定一个 name 列表中名字,该 name 列表在 es 的 jar 包中 config 文件夹里 name.txt 文件中,其中有很多作者添加的有趣名字。
node.name: bookmark-world

# 指定该节点是否有资格被选举成为 node(注意这里只是设置成有资格, 不代表该 node 一定就是 master),
# 默认是 true,es 是默认集群中的第一台机器为 master,如果这台机挂了就会重新选举 master。
node.master: true
 
# 指定该节点是否存储索引数据,默认为 true。
node.data: true

# 设置为 true 来锁住内存不进行 swapping。因为当 jvm 开始 swapping 时 es 的效率 会降低,所以要保证它不 swap,
# 可以把 ES_MIN_MEM 和 ES_MAX_MEM 两个环境变量设置成同一个值,并且保证机器有足够的内存分配给 es。 
# 同时也要允许 elasticsearch 的进程可以锁住内存,linux 下启动 es 之前可以通过`ulimit -l unlimited`命令设置。
# 设置为 true,会导致报警告实际未锁定内存,进而退出进程(es在生产模式下有警告就会退出)
bootstrap.memory_lock: false

# 设置绑定的 ip 地址,可以是 ipv4 或 ipv6 的,默认为 0.0.0.0,绑定这台机器的任何一个 ip。
network.bind_host: 0.0.0.0

# 集群配置
discovery.seed_hosts:
  - bookmark-es
cluster.initial_master_nodes:
  - bookmark-world   

安装 elasticsearch-head 插件

这里在安装的时候,是有一个参考链接

第一步:修改 elasticsearch.yml

// 修改配置文件
vi /apps/elk/es/config/elasticsearch.yml

// 文件里面的内容如下,注意 : 后面需要有空格
cluster.name: "docker-cluster"
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true 
http.cors.allow-origin: "*"

第二步:安装 elasticsearch-head

// 拉取镜像
docker pull mobz/elasticsearch-head:5

// 启动容器
docker run -d --name es_head -p 9100:9100 mobz/elasticsearch-head:5

访问对应的服务地址

问题处理 

在点击数据浏览的时候,发现浏览器控制台报错

这里需要修改 verdor.js 文件内容

# 复制 vendor.js 到外部
docker cp 容器id:/usr/src/app/_site/vendor.js /usr/local/

# 修改vendor.js
vim vendor.js  

由于vendor.js 太大,我是将文件下载到本机,修改完了再传到 虚拟机(CentOS 上面去)

// 将 vendord.js 的 6886 行(原始为 "application/x-www-form-urlencoded"),修改为:
contentType: "application/json;charset=UTF-8",

// 将 vendord.js 的 7573 行(原始为: "application/x-www-form-urlencoded"),修改为:
var inspectData = s.contentType === "application/json;charset=UTF-8" &&

6886 行

 7573 行

修改完成之后,重新传入到容器中,然后重启容器

// 重新传入容器中
docker cp /usr/local/vendor.js  容器id:/usr/src/app/_site

// 重启容器
docker restart 容器id

再次访问,就不会报错,我这里是刚刚搭建的,没有数据

安装 分词器

由于在搭建 SpringBoot 项目,链接 es 的时候,发现有一个没有安装分词器的报错,所以这里还是安装下。

我这里是通过本地下载 分词器,然后传入到 虚拟机上面去:

下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.16.2/elasticsearch-analysis-ik-7.16.2.zip

 关于地址说明,上面的 7.16.2 是我 es 的版本,这个是可以替换的。也可以访问下 github 上面的项目地址,看下最近的信息。

# 将压缩包移动到容器中
docker cp /tmp/elasticsearch-analysis-ik-7.16.2.zip 容器ID:/usr/share/elasticsearch/plugins

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

# 创建目录
mkdir /usr/share/elasticsearch/plugins/ik

# 将文件压缩包移动到ik中
mv /usr/share/elasticsearch/plugins/elasticsearch-analysis-ik-7.16.2.zip /usr/share/elasticsearch/plugins/ik

# 进入目录
cd /usr/share/elasticsearch/plugins/ik

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

# 删除压缩包
rm -rf elasticsearch-analysis-ik-7.16.2.zip

然后退出,重启容器。

安装 kibana

可以在 https://hub.docker.com/ 找找对应版本的 kibana 镜像版本

第一步:下载镜像

// 下载对应版本的 kibana
docker pull kibana:7.16.2

第二步:修改配置文件

这里需要先查看下 对应 es 的 IP 地址

// 查看对应 es 容器的 IP
[root@localhost elk]# docker inspect --format '{
   
   {.NetworkSettings.IPAddress}}' es
172.17.0.2

新增 kibana 配置文件

// 新增目录
mkdir /apps/elk/binana

// 新增配置文件,用于挂载
vi /apps/elk/kibana/kibana.yml

// kibana 的文件内容如下
#Default Kibana configuration for docker target
server.name: kibana
server.host: "0"
elasticsearch.hosts: ["http://172.17.0.2:9200"]
xpack.monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: "zh-CN"

第三步:启动容器

docker run -d -p 5601:5601 \
--log-driver json-file \
--log-opt max-size=100m \
--log-opt max-file=2 \
-v /apps/elk/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml \
--restart=always \
--name kibana kibana:7.16.2

浏览器访问,这个启动比较慢,需要多刷新几次,看到下面的界面,就表示安装完成。

安装 logstash

第一步:拉取镜像

// 创建文件目录, 用于挂载 config 与 pipeline
mkdir /apps/elk/logstash/

// 拉取镜像
docker pull logstash:7.16.2

第二步:增加配置文件

logstash.yml

需要增加的配置文件名称 logstash.yml,参考链接:Logstash7配置文件logstash.yml详解_JineD的博客-CSDN博客_logstash7 配置

// 修改配置文件
vi /apps/elk/logstash/logstash.yml

// 配置文件内容
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://192.168.152.129:9200" ]
# xpack.monitoring.elasticsearch.username: elastic
# xpack.monitoring.elasticsearch.password: changeme

path.config: /usr/share/logstash/config/conf.d/*.conf
path.logs: /usr/share/logstash/logs

编辑 logstash.conf 文件,此处先配置 logstash 直接采集本地数据发送至 es。

syslog.conf 

// 创建文件目录
mkdir /apps/elk/logstash/conf.d

// 新增一个 logstash 的 syslog.conf
vi /apps/elk/logstash/conf.d/syslog.conf 

// syslog.conf 内容
input {
  file {
    # 标签
    type => "systemlog-localhost"
    # 采集点
    path => "/var/log/messages"
    # 开始收集点
    start_position => "beginning"
    # 扫描间隔时间,默认是1s,建议5s
    stat_interval => "5"
  }
}
output {
  elasticsearch {
    # es 服务器可以访问的 IP
    hosts => ["192.168.152.129:9200"]
    # 定义索引
    index => "logstash-system-localhost-%{+YYYY.MM.dd}"
 }
}

input {
  syslog {
    type => "system-syslog"
    port => 5044
  }
}
output {
  elasticsearch {
    # 定义es服务器的ip
    hosts => ["192.168.152.129:9200"]  
    # 定义索引
    index => "system-syslog-%{+YYYY.MM}" 
  }
}

编辑本地 rsyslog 配置增加:

# 增加一行
vim /etc/rsyslog.conf 

## 增加的内容 
*.* @@192.168.152.129:5044

# 重启
systemctl restart rsyslog

第三步:启动 logstash 容器

// 删除之前的容器
docker rm -f logstash

// 修改权限
chown root:docker /apps/elk/logstash
//  或
chown -R 1000:1000 /apps/elk/logstash

// 修改 log 的文件权限
chmod 644 /var/log/messages

// 重新启动容器,启动容器的时候,也可以挂载 
docker run -d --restart=always \
-p 5044:5044 -p 9600:9600 \
--log-driver json-file \
--log-opt max-size=100m \
--log-opt max-file=2 \
-v /apps/elk/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml \
-v /apps/elk/logstash/conf.d:/usr/share/logstash/config/conf.d \
-v /var/log/messages:/var/log/messages \
--name logstash logstash:7.16.2

安装 logstash 时,需要的问题处理

 在配置文件全部搞定的情况下,启动 logstash 容器时,一直启动不了。最开始一直在各种折腾 logstash.yml 和 syslog.conf 。这里记录下,供大家参考

首先,先不用配置文件启动容器,然后看下能不能启动。

// 第一步: 启动容器
docker run -d --name=logstash logstash:7.16.2

// 第二步:看下容器状态,是否为 UP
docker ps -a

// 第三步: 看下容器的日志
docker container logs logstash

接着,就发现问题了,这里报错显示的是空间不足

[root@localhost logstash]# docker container logs logstash
Using bundled JDK: /usr/share/logstash/jdk
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330000, 986513408, 0) failed; error='Not enough space' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 986513408 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /usr/share/logstash/hs_err_pid1.log

查看下空间,发现 swap 空间应该是够的,Mem 空间应该不足了

[root@localhost logstash]# free -m
              total        used        free      shared  buff/cache   available
Mem:            972         817          61           0          92          38
Swap:          2047        1477         570

去修改虚拟机的内存,增加 Mem 空间

 再次查看

[root@localhost logstash]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1996         813        1066           0         117        1148
Swap:          2047        1498         549
[root@localhost logstash]# 

再次启动 logstash,看下状态,此时就可以发现已经启动起来了。

猜你喜欢

转载自blog.csdn.net/qq_18948359/article/details/123252037