关于 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,看下状态,此时就可以发现已经启动起来了。
|