51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

docker-compose部署ELK-7.17.7及配置X-Pack

一、ELK简介

ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。

1、Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

2、Logstash主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

3、Kibana也是一个开源和免费的工具,Kibana可以为Logstash和 ElasticSearch提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

4、Filebeat隶属于Beats。目前Beats包含四种工具:

  • Packetbeat(搜集网络流量数据)
  • Topbeat(搜集系统、进程和文件系统级别的CPU和内存使用情况等数据)
  • Filebeat(搜集文件数据)
  • Winlogbeat(搜集Windows事件日志数据)

二、安装docker-compose

Linux上我们可以从Github上下载它的二进制包来使用,最新发行的版本地址:https://github.com/docker/compose/releases

1、运行以下命令以下载Docker Compose的v2.11.0版本

[root@k8s-master ~]# wget -O /usr/bin/docker-compose https://github.com/docker/compose/releases/download/v2.11.0/docker-compose-linux-x86_64

2、授权可执行权限

[root@k8s-master ~]# chmod +x /usr/bin/docker-compose

3、测试是否安装成功

[root@k8s-master ~]# docker-compose -v

Docker Compose version v2.11.0

三、部署Redis

1、创建Redis目录

[root@k8s-master ~]# mkdir -p /opt/redis

2、创建docker-compose配置文件

[root@k8s-master ~]# cd /opt/redis

[root@k8s-master redis]# vim docker-compose.yml

version: "3.3"
services:
  redis:
    image: "redis:6.2.7"
    container_name: redis
    restart: always
    privileged: true
    ports:
      - "6379:6379"
    volumes:
      - ./redis.conf:/etc/redis/redis.conf:rw
      - ./data:/data:rw
    command:
      # 执行的命令
      redis-server /etc/redis/redis.conf --appendonly yes

3、创建Redis配置文件

[root@k8s-master redis]# vim redis.conf

# 开启保护
protected-mode yes
# 开启远程连接 
bind 0.0.0.0 
# 自定义密码
requirepass Aa123456
port 6379
timeout 0
# 900s内至少一次写操作则执行bgsave进行RDB持久化
save 900 1 
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump.rdb
dir /data
appendonly yes
appendfsync everysec

4、启动Redis

[root@k8s-master redis]# docker-compose up -d

5、查看Redis状态

[root@k8s-master redis]# docker-compose ps

NAME COMMAND SERVICE STATUS PORTS

redis "docker-entrypoint.s..." redis running 0.0.0.0:6379->6379/tcp

6、访问Redis

[root@k8s-master redis]# docker exec -it redis redis-cli

127.0.0.1:6379> keys *

(error) NOAUTH Authentication required.

127.0.0.1:6379> auth Aa123456

OK

127.0.0.1:6379> keys *

(empty array)

127.0.0.1:6379> set test 123

OK

127.0.0.1:6379> get test

"123"

四、部署ELK

1、创建Elastic Stack目录

[root@k8s-master ~]# mkdir -p elk

[root@k8s-master ~]# cd elk/

2、创建docker-compose.yml配置文件

[root@k8s-master elk]# vim docker-compose.yml

version: '3.3'
services:
  elasticsearch:
    image: elasticsearch:7.17.7  # 镜像
    container_name: elasticsearch  # 定义容器名称
    restart: always  # 开机启动,失败也会一直重启
    environment:
      - "cluster.name=elasticsearch-cluster" # 设置集群名称为elasticsearch
      - "discovery.type=single-node" # 以单一节点模式启动
      - "ES_JAVA_OPTS=-Xms2g -Xmx2g" # 设置使用jvm内存大小
      - "TZ=Asia/Shanghai"
    volumes:
      - /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins # 插件文件挂载
      - /data/elasticsearch/data:/usr/share/elasticsearch/data # 数据文件挂载
      - /data/elasticsearch/logs:/usr/share/elasticsearch/logs # 数据文件挂载
      - /data/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml # 配置文件挂载
    ports:
      - 9200:9200
  kibana:
    image: kibana:7.17.7
    container_name: kibana
    restart: always
    volumes:
      - /data/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml
    depends_on:
      - elasticsearch # kibana在elasticsearch启动之后再启动
    environment:
      - "TZ=Asia/Shanghai"
    ports:
      - 5601:5601
  logstash:
    image: logstash:7.17.7
    container_name: logstash
    restart: always
    volumes:
      - /data/logstash:/usr/share/logstash/pipeline # 挂载logstash的配置文件
    environment:
      - "TZ=Asia/Shanghai"
    depends_on:
      - elasticsearch # logstash在elasticsearch启动之后再启动
    links:
      - elasticsearch:es # 可以用es这个域名访问elasticsearch服务
    ports:
      - 4560:4560
  filebeat:
    image: elastic/filebeat:7.17.7
    container_name: filebeat
    privileged: true
    restart: always
    volumes:
      - /data/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml # 挂载filebeat的配置文件
      - /data/filebeat/logs:/usr/share/filebeat/logs # 挂载收集日志目录的路径
    environment:
      - "TZ=Asia/Shanghai"

3、创建数据目录及授权

[root@k8s-master elk]# mkdir -p /data/elasticsearch/{data,logs,plugins}

[root@k8s-master elk]# mkdir -p /data/{kibana,logstash,filebeat}

[root@k8s-master elk]# mkdir -p /data/filebeat/logs

[root@k8s-master elk]# chmod 777 /data/elasticsearch/{data,logs,plugins}

4、创建Elasticsearch配置文件

[root@k8s-master elk]# vim /data/elasticsearch/elasticsearch.yml

# 监听IP
network.host: 0.0.0.0
# 跨域
http.cors.enabled: true
http.cors.allow-origin: "*"

5、创建Logstash配置文件

[root@k8s-master elk]# vim /data/logstash/logstash.conf

input {
    redis {
        host => "10.10.50.24"
        port => "6379"
        db => "0"
        password => "Aa123456"
        data_type => "list"
        key => "message-access-log"
        codec => "json"
    }
}

filter {
if \[fields\]\[logtype\] == "system-messages-log" {
json {
source =\> "message"
}


        grok {
            match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level}" }
        }
                
        date {
            match => ["timestamp", "yyyy-MM-dd HH:mm:ss,SSS"]
            target => "@timestamp"
        }
    }




}
output {
if \[fields\]\[logtype\] == "system-messages-log" {
elasticsearch {
hosts =\> \["10.10.50.24:9200"\]
action =\> "index"
index =\> "system-messages-log-%{+YYYY.MM.dd}"
}
}
}

6、创建Kibana配置文件

[root@k8s-master elk]# vim /data/kibana/kibana.yml

server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://elasticsearch:9200"]
i18n.locale: "zh-CN"

7、创建Filebeat配置文件

[root@k8s-master elk]# vim /data/filebeat/filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/share/filebeat/logs/*.log
  multiline:
      pattern: '\d{1,2}:\d{1,2}:\d{1,2}'
      negate: true
      match: after
  fields:
    logtype: system-messages-log
output.redis:
  enabled: true
  hosts: ["10.10.50.24:6379"]
  password: "Aa123456"
  key: "message-access-log"
  db: 0
  timeout: 10

8、这里以宿主机系统日志为例,具体根据自身要求配置

[root@k8s-master elk]# cp /var/log/messages /data/filebeat/logs

[root@k8s-master elk]# chmod 644 /data/filebeat/logs/messages

9、启动容器

[root@k8s-master elk]# docker-compose up -d

10、查看容器相关信息

[root@k8s-master elk]# docker-compose ps

NAME COMMAND SERVICE STATUS PORTS

elasticsearch "/bin/tini -- /usr/l..." elasticsearch running 0.0.0.0:9200->9200/tcp, 9300/tcp

filebeat "/usr/bin/tini -- /u..." filebeat running

kibana "/bin/tini -- /usr/l..." kibana running 0.0.0.0:5601->5601/tcp

logstash "/usr/local/bin/dock..." logstash running 5044/tcp, 0.0.0.0:4560->4560/tcp, 9600/tcp

11、访问Kibana

1)浏览器输入http://10.10.50.24:5601,如下图所示

2)查看索引,如下图所示

3)创建索引模式,效果如下图

输入名称及选择时间戳字段,如下图所示

4)创建完成之后,点击Discover,如下图所示

五、配置X-Pack认证

X-pack是什么?

X-Pack是Elastic Stack扩展功能,提供安全性,警报,监视,报告,机器学习和许多其他功能。ES7.0+之后,默认情况下,当安装Elasticsearch时,会安装X-Pack,无需单独再安装。

1、修改elasticsearch.yml配置文件

[root@k8s-master elk]# vim /data/elasticsearch/elasticsearch.yml

添加以下内容

# 配置X-Pack
http.cors.allow-headers: Authorization
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

2、重启Elasticsearch

[root@k8s-master elk]# docker-compose restart elasticsearch

3、设置Elasticsearch访问密码

生成密码有如下两种方式

auto - 随机生成密码。

interactive - 自定义不同用户的密码。

注意:必须配置好X-pack之后,才能设置密码。否则会报错。

这里采用自定义密码方式

[root@k8s-master elk]# docker exec -it elasticsearch bin/elasticsearch-setup-passwords interactive

注:这里为了方便演示,密码统一设置为Aa123456

注:配置了密码之后获取集群状态命令如下

[root@k8s-master elk]# curl --user elastic:Aa123456 -X GET 'http://10.10.50.24:9200/_cluster/health?pretty'

{

"cluster_name" : "elasticsearch-cluster",

"status" : "yellow",

"timed_out" : false,

"number_of_nodes" : 1,

"number_of_data_nodes" : 1,

"active_primary_shards" : 12,

"active_shards" : 12,

"relocating_shards" : 0,

"initializing_shards" : 0,

"unassigned_shards" : 1,

"delayed_unassigned_shards" : 0,

"number_of_pending_tasks" : 0,

"number_of_in_flight_fetch" : 0,

"task_max_waiting_in_queue_millis" : 0,

"active_shards_percent_as_number" : 92.3076923076923

}

4、修改Kibana.yml配置文件

[root@k8s-master elk]# vim /data/kibana/kibana.yml

server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://elasticsearch:9200"]
elasticsearch.username: "elastic"
elasticsearch.password: "Aa123456"
i18n.locale: "zh-CN"

5、修改logstash.conf配置文件

[root@k8s-master elk]# vim /data/logstash/logstash.conf

input {
    redis {
        host => "10.10.50.24"
        port => "6379"
        db => "0"
        password => "Aa123456"
        data_type => "list"
        key => "message-access-log"
        codec => "json"
    }
}

filter {
if \[fields\]\[logtype\] == "system-messages-log" {
json {
source =\> "message"
}


        grok {
            match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level}" }
        }
                
        date {
            match => ["timestamp", "yyyy-MM-dd HH:mm:ss,SSS"]
            target => "@timestamp"
        }
    }




}
output {
if \[fields\]\[logtype\] == "system-messages-log" {
elasticsearch {
hosts =\> \["10.10.50.24:9200"\]
user =\> "elastic"
password =\> "Aa123456"
action =\> "index"
index =\> "system-messages-log-%{+YYYY.MM.dd}"
}
}
}

6、重启Logstash和Kibana

[root@k8s-master elk]# docker-compose restart logstash kibana

7、写入测试数据验证日志是否正常采集

[root@k8s-master elk]# echo "Test File" >> /data/filebeat/logs/messages

8、再次查看Discover,如下图所示

至此,docker-compose部署ELK完成。
继续阅读

历史上的今天

11 月
26

赞(0)
未经允许不得转载:工具盒子 » docker-compose部署ELK-7.17.7及配置X-Pack