一、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完成。
若文章图片、下载链接等信息出错,请在评论区留言反馈,博主将第一时间更新!如本文“对您有用”,欢迎随意打赏,谢谢!
云南省昆明市 电信 1F
这里的redis是干什么用的呢
广东省深圳市 电信 B1
@ myitsite` 用于日志数据存储