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



