【基于Docker-Compose安装ELK日志系统完整操作步骤】

一、前言

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 /mnt/elk/es/{
    
    config,data,logs,plugins}
#赋予777权限
chmod 777 /mnt/elk/es/{
    
    config,data,logs,plugins}
#创建kibana挂载目录
mkdir -p /mnt/elk/kibana/{
    
    config,plugins}
#赋予777权限
chmod 777 /mnt/elk/kibana/{
    
    config,plugins}
#创建logstash挂载目录
mkdir -p /mnt/elk/logstash/{
    
    config,pipeline}
#赋予777权限
chmod 777 /mnt/elk/logstash/{
    
    config,pipeline}
#创建filebeat挂载目录
mkdir -p /mnt/elk/filebeat/{
    
    config,logs}
#赋予777权限
chmod 777 /mnt/elk/filebeat/{
    
    config,logs}

3.2 创建相应的配置文件

在/mnt/elk/es/config目录下创建 elasticsearch.yml文件,内容如下:

network.host: 0.0.0.0  #使用的网络
http.cors.enabled: true #跨域配置
http.cors.allow-origin: "*"
#xpack.security.enabled: true  #开启密码配置

在/mnt/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的密码"

在/mnt/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"
  }
}

在/mnt/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的密码"

在/mnt/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

在/mnt/elk目录下创建docker-compose.yml文件,内容如下:

version: '3'
services:
  elasticsearch:
    image: elasticsearch:8.5.3  #镜像
    container_name: elasticsearch  #定义容器名称
    restart: always  #开机启动,失败也会一直重启
    privileged: true
    environment:
      - "cluster.name=elasticsearch" #设置集群名称为elasticsearch
      - "discovery.type=single-node" #以单一节点模式启动
      - "ES_JAVA_OPTS=-Xms512m -Xmx1024m" #设置使用jvm内存大小
    volumes:
      - /mnt/elk/es/plugins:/usr/share/elasticsearch/plugins #插件文件挂载
      - /mnt/elk/es/data:/usr/share/elasticsearch/data #数据文件挂载
      - /mnt/elk/es/logs:/usr/share/elasticsearch/logs #日志文件挂载
      - /mnt/elk/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    ports:
      - "9200:9200"
      - "9300:9300"
    networks:
      - elk_net
  kibana:
    image: kibana:8.5.3
    container_name: kibana
    restart: always
    privileged: true
    depends_on:
      - elasticsearch #kibana在elasticsearch启动之后再启动
    environment:
      - ELASTICSEARCH_URL=http://elasticsearch:9200 #设置访问elasticsearch的地址
    volumes:
      - /mnt/elk/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
    ports:
      - 5601:5601
    networks:
      - elk_net
  logstash:
    image: logstash:8.5.3
    container_name: logstash
    restart: always
    privileged: true
    volumes:
      - /mnt/elk/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml
      - /mnt/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:8.5.3
    user: "root"
    depends_on:
      - elasticsearch
      - logstash
      - kibana
    restart: on-failure
    privileged: true
    volumes:
      - /mnt/elk/filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml
      - /mnt/elk/filebeat/logs:/var/log/logapp
    networks:
      - elk_net
networks:
  elk_net:
    driver: bridge

3.3 启动docker-compose

#修改sysctl.conf配置,否则启动可能会报错
vim /etc/sysctl.conf
{
    
    
vm.max_map_count=262144
}
#刷新文件,使配置生效
sysctl -p
#进入ELK容器编排文件所在目录
cd /mnt/elk
#启动ELK容器编排
docker-compose up -d
#查看容器启动情况
docker ps
#进入es容器设置账号密码登录
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.0.132:9200'
#退出容器
exit
#修改elasticsearch.yml配置文件开启密码校验
{
    
    
xpack.security.enabled: true
}
#重启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
#安装json_lines插件
docker exec -it logstash /bin/bash
#进入bin目录
cd bin
logstash-plugin install logstash-codec-json_lines
#退出容器
exit
#修改
{
    
    
#xpack.monitoring.elasticsearch.username: "elastic"
#xpack.monitoring.elasticsearch.password: "在es中设置elastic的密码"
}
#重启logstash容器
docker restart logstash

在这里插入图片描述

四、访问Kinaba地址:http://192.168.0.132:5601

在这里插入图片描述
查看索引管理
在这里插入图片描述
往/mnt/elk/filebeat/logs添加日志文件test.log
在这里插入图片描述
在这里插入图片描述
进入视图管理器查看收集到的日志信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43755251/article/details/129448355