docker-compose 安装ELK
本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net
一、前言
ELK 是三个开源软件的缩写,分别是 Elasticsearch、Logstash、Kibana,一般情况下会结合 FileBeat 使用。
Elasticsearch:是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful 风格接口,多数据源,自动搜索负载等。
Kibana:是一款开源的数据分析和可视化平台,它是 Elastic Stack 成员之一,设计用于和 Elasticsearch 协作。您可以使用 Kibana 对 Elasticsearch 索引中的数据进行搜索、查看、交互操作。您可以很方便的利用图表、表格及地图对数据进行多元化的分析和呈现。
Logstash:主要是用来日志的搜集、分析、过滤日志的工具,支持多种多样的数据获取方式。一般工作方式为 c/s 架构,Client 端安装在需要收集日志的服务器上,Server 端负责将收到的各节点日志进行过滤、修改等操作,再一并发往 Elasticsearch 上去。
Filebeat:轻量级数据收集引擎,隶属于 Beats。是一个轻量级的日志收集处理工具 (Agent),Filebeat 占用资源少,适合于在各个服务器上搜集日志后传输给 Logstash,官方也推荐此工具。目前 Beats 包含四种工具:Packetbeat(搜集网络流量数据)、Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)、Filebeat(搜集文件数据)、Winlogbeat(搜集 Windows 事件日志数据)。
二、准备工作
2.1 安装 Docker
因为本文介绍的是基于 docker 安装 Yapi,所以先决条件是系统必须先安装好 docker 才能往下走,如果对 docker 的安装还不熟悉的可以查看我的另一篇文章【Linux 安装最新版 Docker 完整教程】,安装完之后再往下看。
2.2 安装 Docker-Compose
#下载最新版docker-compose
curl -L https://github.com/docker/compose/releases/download/2.16.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#添加可执行权限
chmod +x /usr/local/bin/docker-compose
#查看版本信息
docker-compose --version
三、Docker-Compose 编排部署 ELK
3.1 创建所需的挂载目录
#创建es挂载目录
mkdir -p /usr/local/src/other/elk/es/{config,data,logs,plugins}
#赋予777权限
chmod 777 /usr/local/src/other/elk/es/{config,data,logs,plugins}
#创建kibana挂载目录
mkdir -p /usr/local/src/other/elk/kibana/{config,plugins}
#赋予777权限
chmod 777 /usr/local/src/other/elk/kibana/{config,plugins}
#创建logstash挂载目录
mkdir -p /usr/local/src/other/elk/logstash/{config,pipeline}
#赋予777权限
chmod 777 /usr/local/src/other/elk/logstash/{config,pipeline}
#创建filebeat挂载目录
mkdir -p /usr/local/src/other/elk/filebeat/{config,logs}
#赋予777权限
chmod 777 /usr/local/src/other/elk/filebeat/{config,logs}
3.2 创建相应的配置文件
在 /usr/local/src/other/elk/es/config 目录下创建 elasticsearch.yml 文件,内容如下:
network.host: 0.0.0.0 #使用的网络
http.cors.enabled: true #跨域配置
http.cors.allow-origin: "*"
#xpack.security.enabled: true #开启密码配置
在 /usr/local/src/other/elk/kibana/config 目录下创建 kibana.yml
i18n.locale: "zh-CN" #汉化
server.name: "kibana"
server.host: "0.0.0.0"
#server.shutdownTimeout: "10s" #新版本中已移除
elasticsearch.hosts: ["http://elasticsearch:9200"]
#elasticsearch.username: "kibana_system" #注意不能用elastic超管账号登录
#elasticsearch.password: "在es中设置kibana_system的密码"
在 /usr/local/src/other/elk/logstash/pipeline 目录下创建 logstash.conf 文件,内容如下:
input {
beats {
port => 5044
}
}
filter {
grok {
match => {
"message" => "(?m)^\[%{INT:pid}\]%{SPACE}%{TIMESTAMP_ISO8601:createTime}%{SPACE}\[%{DATA:threadName}\]%{SPACE}%{LOGLEVEL:LEVEL}%{SPACE}%{JAVACLASS:javaClass}#(?<methodName>[a-zA-Z_]+):%{INT:linenumber}%{SPACE}-%{GREEDYDATA:msg}"
}
}
}
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
index => "test-log"
user => "elastic"
password => "XXXXXX"
}
}
在 /usr/local/src/other/elk/logstash/config 目录下创建 logstash.yml 文件,内容如下:
http.host: "0.0.0.0"
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.hosts: ["http://elasticsearch:9200"]
#xpack.monitoring.elasticsearch.username: "elastic"
#xpack.monitoring.elasticsearch.password: "在es中设置elastic的密码"
在 /usr/local/src/other/elk/filebeat/config 目录下创建 filebeat.yml 文件,内容如下:
# 定义应用的input类型、以及存放的具体路径
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/logapp/*.log #日志输出地址
tags: ["test-log"]
#============================= Filebeat modules ===============================
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: true
# ============================== logstash =====================================
output.logstash:
hosts: ["logstash:5044"]
enabled: true
在 /usr/local/src/other/elk 目录下创建 docker-compose.yml 文件,内容如下:
version: '3'
services:
elasticsearch:
image: elasticsearch:7.8.1 #镜像
container_name: elasticsearch #定义容器名称
restart: always #开机启动,失败也会一直重启
privileged: true
environment:
- "cluster.name=elasticsearch" #设置集群名称为elasticsearch
- "discovery.type=single-node" #以单一节点模式启动
- "ES_JAVA_OPTS=-Xms4096m -Xmx8192m" #设置使用jvm内存大小
volumes:
- /usr/local/src/other/elk/es/plugins:/usr/share/elasticsearch/plugins #插件文件挂载
- /usr/local/src/other/elk/es/data:/usr/share/elasticsearch/data #数据文件挂载
- /usr/local/src/other/elk/es/logs:/usr/share/elasticsearch/logs #日志文件挂载
- /usr/local/src/other/elk/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- /usr/local/src/other/elk/es/config:/usr/share/elasticsearch/config
ports:
- "9200:9200"
- "9300:9300"
networks:
- elk_net
kibana:
image: kibana:7.8.1
container_name: kibana
restart: always
privileged: true
depends_on:
- elasticsearch #kibana在elasticsearch启动之后再启动
environment:
- ELASTICSEARCH_URL=http://elasticsearch:9200 #设置访问elasticsearch的地址
volumes:
- /usr/local/src/other/elk/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
ports:
- 5601:5601
networks:
- elk_net
logstash:
image: logstash:7.8.1
container_name: logstash
restart: always
privileged: true
volumes:
- /usr/local/src/other/elk/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml
- /usr/local/src/other/elk/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
depends_on:
- elasticsearch #kibana在elasticsearch启动之后再启动
ports:
- 5044:5044
networks:
- elk_net
filebeat:
container_name: filebeat
image: elastic/filebeat:7.8.1
user: "root"
depends_on:
- elasticsearch
- logstash
- kibana
restart: on-failure
privileged: true
volumes:
- /usr/local/src/other/elk/filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml
- /usr/local/src/other/elk/filebeat/logs:/var/log/logapp
networks:
- elk_net
networks:
elk_net:
driver: bridge
3.3 启动 docker-compose
- 改变设置
sysctl -w vm.max_map_count=262144
- 设置内核参数
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
- 使立即生效
sysctl -p
- 重启 docker,让内核参数对docker服务生效
systemctl restart docker
- 进入ELK容器编排文件所在目录
cd /usr/local/src/other/elk
- 启动ELK容器编排
docker-compose up -d
- 查看容器启动情况
docker-compose ps
- 进入es容器设置账号密码登录
- 先开启配置文件中的密码配置
修改elasticsearch.yml
xpack.security.enabled: true
- 重启es容器
docker restart elasticsearch
- 进入容器
docker exec -it elasticsearch /bin/bash
- 执行设置:elastic、apm_system、kibana_system、logstash_system、beats_system、remote_monitoring_user共6个用户账号密码
./bin/elasticsearch-setup-passwords interactive -u 'http://192.168.1.123:9200'
- 重启es容器
docker restart elasticsearch
- 修改kibana.yml配置文件使用密码登录es
monitoring.ui.container.elasticsearch.username: "kibana_system"
monitoring.ui.container.elasticsearch.password: "刚刚在es中设置kibana_system的密码"
- 重启kibana容器
docker restart kibana
- logstash容器安装json_lines插件
docker exec -it logstash /bin/bash
cd bin
logstash-plugin install logstash-codec-json_lines
#等待执行完成后退出容器
exit
- 修改配置
/usr/local/src/other/elk/logstash/config/logstash.yml
vim /usr/local/src/other/elk/logstash/config/logstash.yml
xpack.monitoring.elasticsearch.username: "elastic"
xpack.monitoring.elasticsearch.password: "在es中设置elastic的密码"
- 重启logstash容器
docker restart logstash
解决安装filebeat挂载配置文件报错
Exiting: error loading config file: config file ("/opt/filebeat/filebeat.yml") can only be writable by the owner but the permissions are "-rwxrwxrwx" (to fix the permissions use: 'chmod go-w /opt/filebeat/filebeat.yml')
报错是因为安全原因不要其他用户写的权限,去掉写的权限就可以了,我把777修改成755,转码后是493
根据提示 对挂载的配置文件执行 chmod go-w /usr/local/src/other/elk/filebeat/config/filebeat.yml')
然后重启filebeat
容器
docker restart filebeat
四、访问 Kinaba 地址:http://192.168.1.123:5601
查看索引管理
往 /usr/local/src/other/elk/filebeat/logs 添加日志文件 test.log
进入视图管理器查看收集到的日志信息