ELK 是一套日志收集套件,它其实有由 Elasticsearch、Logstash 和 Kibana 三个软件组成,通过 ELK 可以收集系统日志、网站日志、应用系统日志等各种日志数据,并且还可以对日志进行过滤、清洗,然后进行集中存放并可用于实时检索、分析,这是 ELK 的基础功能。

框架

ELK 集中式日志系统部署 - 图1

流程

image.png

环境

Windos 也能部署,但是个人建议能用 Linux 尽量用 Linux,以 CentOS 7 为例
CentOS 7 系统初始化

Java

java -version
image.png

部署

https://www.elastic.co/cn/downloads/

Elasticsearch(检索分析)

https://www.elastic.co/cn/downloads/elasticsearch
导入密钥

  1. rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

编辑 vim /etc/yum.repos.d/elasticsearch.repo

  1. [elasticsearch]
  2. name=Elasticsearch repository for 7.x packages
  3. baseurl=https://artifacts.elastic.co/packages/7.x/yum
  4. gpgcheck=1
  5. gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
  6. enabled=0
  7. autorefresh=1
  8. type=rpm-md

yum install --enablerepo=elasticsearch elasticsearch 进行安装

修改配置

vim /etc/elasticsearch/elasticsearch.yml,取消以下两行的注释:

  1. ## 设置节点名称
  2. node.name: node-1
  3. ## 设置内存是否使用交换分区
  4. bootstrap.memory_lock: true/false
  5. ## 上述如果为 false 需要追加配置
  6. bootstrap.system_call_filter: false
  7. ## 设置允许所有 ip 可以访问
  8. network.host: 0.0.0.0
  9. ## 开启监听的端口为 9200
  10. http.port: 9200
  11. ## 初始时 Master 节点选取
  12. cluster.initial_master_nodes: ["node-1"]
  1. xpack.security.enabled: true
  2. xpack.security.transport.ssl.enabled: true
  3. xpack.security.authc.api_key.enabled: true
  4. xpack.security.authc.accept_default_password: false

内置账号
elastic 为 elasticsearch 超级管理员,拥有所有权限
kibana 用于 kibana 组件获取相关信息用于 web 展示
logstash_system 用于 logstash 服务获取 elasticsearch 的监控数据
设置密码:

  1. cd /usr/share/elasticsearch
  2. bin/elasticsearch-setup-passwords auto | interactive

image.png
修改用户密码

  1. curl -XPOST -H 'Content-type: application/json' -u elastic:JhuDa6IFOOtRMOVTI3gu 'http://127.0.0.1:9200/_xpack/security/user/elastic/_password?pretty' -d '{"password": "123456"}'

image.png

运行

  1. systemctl daemon-reload
  2. systemctl enable elasticsearch
  3. systemctl start elasticsearch
  4. ## 运行成功以后输入以下语句检测是否成功
  5. netstat -lantp | grep 9200

报错

  1. bootstrap check failure [1] of [2]: memory locking requested for elasticsearch process but memory is not locked
  2. bootstrap check failure [2] of [2]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured

没有对 ElasticSearch 发现进行配置,至少需要配置 discovery.seed_hosts、discovery.seed_providers、cluster.initial_master_nodes 中的一个:

  1. discovery.seed_hosts:集群节点列表,每个值应采用 hostport host 的形式(其中 port 默认为设置 transport.profiles.default.port,如果未设置则返回 transport.port
  2. discovery.seed_providers:集群节点列表的提供者,作用就是获取 discovery.seed_hosts,比如使用文件指定节点列表
  3. cluster.initial_master_nodes:初始化时 master 节点的选举列表,一般使用 node.name(节点名称)配置指定,配置旨在第一次启动有效,启动之后会保存,下次启动会读取保存的数据

Logstash(过滤转发)

https://www.elastic.co/cn/downloads/logstash
vim /etc/yum.repos.d/logstash.repo

  1. [logstash-7.x]
  2. name=Elastic repository for 7.x packages
  3. baseurl=https://artifacts.elastic.co/packages/7.x/yum
  4. gpgcheck=1
  5. gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
  6. enabled=1
  7. autorefresh=1
  8. type=rpm-md

yum install logstash

配置

vim /etc/logstash/logstash.yml

  1. ##设置数据的存储路径
  2. path.data: /var/lib/logstash
  3. http.enabled: true
  4. http.host: 127.0.0.1
  5. http.port: 9600
  6. ##设置管道配置文件路径
  7. path.config: /etc/logstash/conf.d
  8. ##设置日志文件的存储路径
  9. path.logs: /log/ls-log
  10. ##设置日志级别和路径
  11. log.level: debug
  12. path.logs: /var/log/logstash

运行

  1. systemctl daemon-reload
  2. systemctl enable logstash
  3. systemctl start logstash
  4. ## 运行成功以后输入以下语句检测是否成功
  5. netstat -lantp | grep 5601

报错

tail -999f /var/log/messages

Kibana(挖掘可视)

https://www.elastic.co/cn/downloads/kibana
vim /etc/yum.repos.d/kibana.repo

  1. [kibana-7.x]
  2. name=Kibana repository for 7.x packages
  3. baseurl=https://artifacts.elastic.co/packages/7.x/yum
  4. gpgcheck=1
  5. gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
  6. enabled=1
  7. autorefresh=1
  8. type=rpm-md

yum install kibana

修改配置

vim /etc/kibana/kibana.yml,取消以下注释,并修改相应的内容:

  1. ##kibana 页面映射在 5601 端口
  2. server.port: 5601
  3. ##许所有 ip 访问 5601 端口
  4. server.host: "0.0.0.0"
  5. ##Elasticsearch 所在的 ip 及监听的地址
  6. elasticsearch.url: "http://localhost:9200"
  7. elasticsearch.username: "kibana_system"
  8. elasticsearch.password: "5BW6Tahvj5wdbNrdJaoK"
  9. kibana.index: ".kibana"
  10. ##设置中文
  11. i18n.locale: "zh-CN"
  1. xpack.security.enabled: true
  2. xpack.ingestManager.fleet.tlsCheckDisabled: true
  3. xpack.security.encryptionKey: "xN2dWHheUoUoNoToBGqhjgBJH2Q5FrHN"

运行

  1. systemctl daemon-reload
  2. systemctl enable kibana
  3. systemctl start kibana
  4. ## 运行成功以后输入以下语句检测是否成功
  5. netstat -lantp | grep 5601

http://ip:5601/status 查看状态

Beats(数据采集)

轻量型数据采集器,Beats 是一个免费且开放的平台,集合了多种单一用途数据采集器;它们从成百上千或成千上万台机器和系统向 Logstash 或 Elasticsearch 发送数据。

Filebeat

https://www.elastic.co/cn/downloads/beats/filebeat
Filebeat 是一个轻量级的日志采集器,由于 logstash 比较消耗资源,不适合在每台主机上部署 logstash
vim /etc/yum.repos.d/elastic.repo

  1. [elastic-7.x]
  2. name=Elastic repository for 7.x packages
  3. baseurl=https://artifacts.elastic.co/packages/7.x/yum
  4. gpgcheck=1
  5. gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
  6. enabled=1
  7. autorefresh=1
  8. type=rpm-md

yum install filebeat

配置

vim /etc/filebeat/filebeat.yml

  1. enabledtrue
  2. paths:程序日志路径
  3. output.redis:日志输出地方
  4. hostsredis 所在服务器 IP
  5. portredis 端口
  6. keyredis 中的 key

运行

  1. systemctl enable filebeat
  2. systemctl start filebeat

Metricbeat

轻量型指标采集器,用于从系统和服务收集指标;Metricbeat 能够以一种轻量型的方式,输送各种系统和服务统计数据,从 CPU 到内存,从 Redis 到 Nginx,不一而足。
https://www.elastic.co/cn/downloads/beats/metricbeat

缓冲队列

image.png

Redis

安装并配置 Redis

  1. yum install -y redis
  2. systemctl start redis
  3. systemctl enable redis
  1. vim /etc/redis.conf
  2. #任何地址 IP 都可以登录 Redis
  3. bind 0.0.0.0
  4. #关闭 Redis 保护机制否则在没有密码校验情况下 Redis 远程登录失败
  5. protected-mode no
  6. #认证密码
  7. requirepass 123456
  8. #超时时间
  9. timeout 120
  10. #开启后台运行
  11. daemonize yes

Filebeat 采集的日志推送到 Redis

  1. vim /etc/filebeat/filebeat.yml
  2. filebeat.inputs:
  3. - type: log
  4. enabled: true
  5. paths:
  6. - /var/log/nginx/*.log
  7. tags: ["nginx"]
  8. fields_under_root: true
  9. fields:
  10. project: microservice
  11. app: product
  12. output.redis:
  13. hosts: ["xxx.xxx.xxx.xxx:6379"]
  14. password: 123456
  15. key: "filebeat"
  16. db: 0
  17. datatype: "list"
  18. systemctl restart filebeat
  19. journalctl -u filebeat -f