基于docker的ELK部署

2,939 阅读3分钟

基于docker的ELK部署

ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana,但是我们实际应用一般都会加上FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash

准备YML文件

本次使用docker-compose部署,镜像版本均为8.4.3

文件目录结构(在home目录下)

  • elk

    • docker-compose.yml

    • elasticsearch.yml

    • kibana.yml

    • logstash.yml

    • logstash.conf

    • filebeat.yml

    • data/

      • elasticsearch/
      • logs/

data/elasticsearch/ 文件夹是用来保存elasticsearch数据用的 data/logs 需要采集的日志的目录

docker-compose.yml

version: "3"
services:
  es:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.4.3
    labels:
      co.elastic.logs/enabled: "false"
    hostname: docker-es
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      - discovery.type=single-node
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
      - ELASTIC_PASSWORD=elastic
      - KIBANA_PASSWORD=elastic
    volumes:
      - ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - ./data/elasticsearch:/usr/share/elasticsearch/data
​
  kibana:
    image: docker.elastic.co/kibana/kibana:8.4.3
    labels:
      co.elastic.logs/enabled: "false"
    hostname: docker-kibana
    ports:
      - "5601:5601"
    volumes:
      - ./kibana.yml:/usr/share/kibana/config/kibana.yml
    depends_on:
      - es
​
  logstash:
    image: docker.elastic.co/logstash/logstash:8.4.3
    hostname: docker-logstash
    labels:
      co.elastic.logs/enabled: "false"
    ports:
      - "5044:5044"
      - "9600:9600"
    volumes:
      - ./logstash.yml:/usr/share/logstash/config/logstash.yml
      - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
      - ./data/logs:/logs
    environment:
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "LS_OPTS=--config.reload.automatic"
    depends_on:
      - es
​
  filebeat:
    image: docker.elastic.co/beats/filebeat:8.4.3
    labels:
      co.elastic.logs/enabled: "false"
    user: root
    hostname: docker-filebeat
    volumes:
      - ./filebeat.yml:/usr/share/filebeat/filebeat.yml
      - "/var/lib/docker/containers:/var/lib/docker/containers:ro"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    depends_on:
      - es
​

这里值得注意的是:

elasticsearch的登录密码是 ELASTIC_PASSWORD=elastic

kibana的初始密码是KIBANA_PASSWORD=elastic

elasticsearch.yml

network.host: 0.0.0.0
http.port: 9200
transport.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
xpack.security.enabled: true
xpack.security.http.ssl.enabled: false
xpack.security.transport.ssl.enabled: false

kibana.yml

server:
  host: "0.0.0.0"
  port: 5601

# ES
elasticsearch:
  hosts: ["http://docker-es:9200"]
  username: "kibana_system"
  password: "elastic"

# 汉化
i18n.locale: "zh-CN"

这里值得注意的是,密码password要对应docker-compose.yml里面的kibana的初始密码

logstash.yml

http.host: "0.0.0.0"
path.config: /usr/share/logstash/pipeline/*.conf
xpack.monitoring.enabled: false

logstash.conf

input {
    file {
        path => "/logs/*.log"
        start_position => "beginning"
    }
}
​
output {
    elasticsearch {
        hosts => [ "http://docker-es:9200" ]
        user => "elastic"
        password => "elastic"
        index => "logstash-%{+YYYY-MM-dd}"
    }
}
​

这里的密码是,elasticsearch的登录密码

filebeat.yml

filebeat.config:
  modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false

filebeat.autodiscover:
  providers:
    - type: docker
      hints.enabled: true

processors:
  - add_cloud_metadata: ~

output.elasticsearch:
  hosts: 'docker-es:9200'
  username: 'elastic'
  password: 'elastic'

这里的密码是,elasticsearch的登录密码

安装前

安装前,一定要把data目录的权限赋值为最高,不然elasticsearch安装报错,权限不足

chmod -R 777 /home/elk/data

同时也将相关的yml文件权限赋值为可执行

chmod +x *.yml

image-20221028110717547.png

安装

elk目录下执行:

最好先把镜像下载好,不然执行太久,而导致失败

docker-compose up -d

验证elasticsearch和kibana

登录elasticsearch,端口9200,账号密码:elastic/elastic

image-20221028111106301.png 登录kibana,端口5601,账号密码:elastic/elastic

image-20221028111245080.png

如果能正常登录进去,那么elasticsearch和kibana部署成功

验证Filebeat和Logstash

从左侧菜单中,可以找到Management,点击,找到数据视图

image-20221028112108539.png

从下图可以看出,右侧出现filebeathelogstash,证明部署成功

image-20221028111831882.png

创建logstash视图:

image-20221028113133090.png

验证日志收集

我们的最终目的是,能够监控log日志自动上报es,现在可以在logs目录下任意创建.log结尾的文件

abc.log

第一次部署ELK 好激动 啊啊啊啊啊 噢噢噢噢噢噢噢噢

image-20221028113249431.png

在kibana的discover页面中查看:

image-20221028113555096.png

其他问题

重新设置elastic,kibana_system等用户的密码

进入elasticsearch容器的bin目录执行:

./elasticsearch-setup-passwords interactive

elk重启,es正常启动,但是可能kibana报错

image-20221121145734971.png

解决方法:

删除kibana相关的索引,一般是.kibana*,此时只能通过elasticsearch的接口删除了

同时,删除kibana相关的索引只能用kibana_system用户的账号和密码

  • 获取索引及别名(es的账号密码)

    http://10.1.34.159:9200/_aliases
    

image-20221121151541920.png

-   删除索引别名(kibana_system账号和密码)

```
http://10.1.34.159:9200/_aliases
{
  "actions": [
    {
      "remove": {
        "index": ".kibana_task_manager_8.4.3_001",
        "alias": ".kibana_task_manager_8.4.3"
      }
    }
  ]
}
```

image-20221121151732575.png

  • 删除索引(kibana_system账号和密码)

    http://10.1.34.159:9200/.kibana_task_manager_8.4.3_001
    

image-20221121152054963.png