ELK日志分析系统部署文档

一、ELK说明

ELK是Elasticsearch(ES) + Logstash + Kibana 这三个开源工具组成,官方网站: The Elastic Search AI Platform --- Drive real-time insights | Elastic

简单的ELK架构

ES: 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。

Kibana: 可以对 Elasticsearch 进行可视化,还可以在 Elastic Stack 中进行导航,这样便可以进行各种操作了,从跟踪查询负载,到理解请求如何流经您的整个应用,都能轻松完成。

Logstash: 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的"存储库"中。一般用在日志的搜集、分析、过滤,支持大量的数据获取方式。

Filebeat:收集文件数据。

二、基础环境

  1. 准备以下几台机器:

|----------|---------------------|---------|----------------------|
| 主机 | 服务器角色 | 主机系统 | 软件版本 |
| es-node1 | Elasticsearch(搜索引擎) | Centos7 | Elasticsearch:7.15.5 |
| es-node2 | Elasticsearch(搜索引擎) | Centos7 | Elasticsearch:7.15.5 |
| es-node3 | Elasticsearch(搜索引擎) | Centos7 | Elasticsearch:7.15.5 |
| kibana | Kibana(界面展示) | Centos7 | Kibana:7.15.5 |
| logstash | Logstash(日志处理) | Centos7 | Logstash:7.15.5 |
| filebeat | Filebeat(日志收集) | Centos7 | Filebeat:7.15.5 |

  1. 关闭selinux

3.主机之间同步时间

三、Elasticsearch集群部署

3.1 前提准备

3.1.1 安装包下载

https://www.elastic.co/cn/downloads/past-releases#elasticsearch 进行下载相应的产品版本,点击"Download"后选择需要的方式包进行下载,本文以linux 二进制方式进行部署

3.1.2 创建用户及授权(注:每个节点都需要操作)

ElasticSerach要求以非root身份启动,在每个节点创建用户及用户组

|-----|---------------------------------------------------------------------|
| 1 2 | groupadd elasticsearch useradd elasticsearch -g elasticsearch |

解压安装包并附所属权

tar -xvzf elasticsearch-7.17.5-linux-x86_64.``tar``.gz -C ``/home/elasticsearch

chown -R elasticsearch:elasticsearch ``/home/elasticsearch/elasticsearch-7``.17.5

在每个节点上创建数据data和logs目录:

|-----|--------------------------------------------------|
| 1 2 | mkdir -p ``/data/elasticsearch/``{data,logs} |

3.1.3 java环境

配置环境变量

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ## 在/etc/profile 下添加 ## set java environment JAVA_HOME=``/home/elasticsearch/elasticsearch-7``.17.5``/jdk CLASSPATH=$JAVA_HOME``/lib/ PATH=$PATH:$JAVA_HOME``/bin export PATH JAVA_HOME CLASSPATH |

使环境变量生效并验证

|-----|-----------------------------------------|
| 1 2 | source /etc/profile java -version |

3.1.4 内存不能锁定问题(可选)

|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 | ## 在配置 ElasticSearch 服务过程中,我们一般要设置 bootstrap.memory_lock 为 true,避免内存数据被交换到 SWAP 分区中。 cat /etc/systemd/system``.conf |``grep DefaultLimitMEMLOCK ## 需要修改为: DefaultLimitMEMLOCK=infinity |

注:需要重启机器

3.1.5 修改vm.max_map_count

修改一个进程可以拥有的VMA(虚拟内存区域)的数量

vim /etc/sysctl.conf 调整:

vm.max_map_count=262144

执行:sysctl -p 生效

3.2 配置

3.2.1 修改elasticsearch配置文件

配置elasticsearch.yml文件说明:

bash 复制代码
node.name: node-1 #每个节点不一样
 
#节点是否具有成为主节点的资格
node.master: true
 
#节点是否存储数据
node.data: true
 
#ES 数据保存目录
path.data: /data/elasticsearch/data
 
#ES 日志保存目
path.logs: /data/elasticsearch/logs
 
#服务启动的时候锁定足够的内存,防止数据写入
swapbootstrap.memory_lock: true
 
#监听 
IPnetwork.host: 0.0.0.0
 
#监听端口
http.port: 9200
 
#集群中 node 节点发现列表
discovery.seed_hosts: ["10.10.100.110", "10.10.100.111","10.10.100.112"]
 
#集群初始化那些节点可以被选举为 
mastercluster.initial_master_nodes: ["10.10.100.110", "10.10.100.111","10.10.100.112"]
 
#一个集群中的 N 个节点启动后,才允许进行数据恢复处理,默认是 1
gateway.recover_after_nodes: 2
 
####设置是否可以通过正则或者_all 删除或者关闭索引库,
####默认 true 表示必须需要显式指定索引库名称,
####生产环境建议设置为 true,
####删除索引库的时候必须指定,否则可能会误删索引库中的索引库。
action.destructive_requires_name: true

node1节点

|---|-----------------------------------------------|
| 1 | grep -Ev ``"^$|^[#;]" elasticsearch.yml |

node2节点

grep -Ev ``"^$|^[#;]" elasticsearch.yml

node3节点

|---|-----------------------------------------------|
| 1 | grep -Ev ``"^$|^[#;]" elasticsearch.yml |

3.2.2 修改JVM内存限制

|---------|-----------------------------------------------------------------------------------------|
| 1 2 3 4 | 在vm.options 中调整: -Xms2g -Xmx2g ``#最小和最大内存限制 #官方配置文档最大建议 30G 以内,默认是1G,根据实际情况进行调整 |

3.2.3 开启跨域访问支持(可选)

|-----------|----------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 | 在elasticsearch.yml文件中配置一下2个参数: #开启支持跨域访问 http.cors.enabled: ``true #指定允许访问范围 http.cors.allow-origin: ``"*" |

3.3 启动并验证

|-------|---------------------------------------------------------------------------------------|
| 1 2 3 | ## 启动: su - elasticsearch .``/elasticsearch-7``.17.5``/bin/elasticsearch -d |

|--------------------------------------------------------------------------------------|
| 查看监听端口,分别是9200和9300: netstat -ant|``grep 9200 netstat -ant|``grep 9300 |

浏览器访问查看:

查看集群健康状态:http://IP:9200/_cluster/health?pretty

查看集群详细信息:http://IP:9200/_cluster/state?pretty

查看索引列表:http://IP:9200/_cat/indices?v

四、Kibana部署

本文复用ES的一台机器进行部署,实际环境可以单独部署一台。

4.1 前提准备

4.1.1 安装包下载

在https://www.elastic.co/cn/downloads/past-releases#kibana 进行下载相应的软件版本

4.1.2 创建用户及授权

|-----|------------------------------------------------|
| 1 2 | groupadd kibana useradd kibana -g kibana |

4.1.3 解压安装包并附所属权

|---|-----------------------------------------------------------------------|
| 1 | tar -xzvf kibana-7.17.5-linux-x86_64.``tar``.gz -C ``/home/kibana |

|------------------------------------------------------------------------|
| chown -R kibana:kibana ``/home/kibana/kibana-7``.17.5-linux-x86_64 |

4.1.4 创建日志目录并附所属权

|-----|-----------------------------------------------------------------------------|
| 1 2 | mkdir -p ``/data/kibana/logs/ chown -R kibana:kibana ``/data/kibana |

4.2 配置

|---|----------------------------------------|
| 1 | grep -Ev ``"^$|^[#;]" kibana.yml |

4.3 启动并验证

使用kibana账号启动

4.3.1 启动

|-----|---------------------------------------------------------------------------------------------------------------------|
| 1 2 | su - kibana .``/kibana-7``.17.5-linux-x86_64``/bin/kibana --allow-root > ``/data/kibana/logs/kibana``.log & |

|----------------------------------------------|
| 停止: kill -9 ````lsof` -i :5601 -t``` |

4.3.2 验证

|-----|-------------------------------------------|
| 1 2 | ## 端口验证: netstat -ant|``grep 5601 |

浏览器验证:http:IP:5601

五、Logstash部署

5.1 准备

5.1.1 安装包下载

通过官网下载链接: https://www.elastic.co/cn/downloads/past-releases#logstash 选择对应的版本

5.1.2 创建数据和日志目录

|---|---------------------------------------------|
| 1 | mkdir -p ``/data/logstash/``{logs,data} |

5.2 配置

5.2.1 修改logstash配置文件(可以不修改)

|---|------------------------------------------|
| 1 | grep -Ev ``"^$|^[#;]" logstash.yml |

5.2.2 创建监控日志的配置文件

bash 复制代码
Logstash可以直接采集日志文件;本文采用filebeat收集日志,logstash处理日志
input {
  beats {
    port => 5044
    codec => plain{ charset => "GB2312" }
  }
}
filter{
  grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:logdate}" }
  }
  date {
    match => [ "logdate","ISO8601"]
    target => "@timestamp"
  }
  mutate{
    remove_field => "logdate"
  }
}
output {
  elasticsearch {
    hosts => ["10.211.55.5:9200"]  # 定义es服务器的ip
    index => "emqx-%{+YYYY.MM.dd}" # 定义索引
  }
}

|-------------------------------------------|
| grep -Ev ``"^$|^[#;]" logstash.conf |

5.3 启动

## 默认端口:9600,执行命令后需要等一会儿启动成功。

.``/bin/logstash -f config``/logstash``.conf &

5.4 验证

六、Filebeat部署

6.1准备

官网下载安装包链接:https://www.elastic.co/cn/downloads/past-releases#filebeat ,选择对应版本

6.2 配置

bash 复制代码
filebeat安装后,只需要配置好监控的日志。包含input和output 等。
filebeat.inputs:
# 第一个输入
- type: log
#是否启用
  enabled: true
  # 自定义标签
  tags: ["qgzhdc-px-data-node"]
  # 收集日志的文件路径,可以使用通配附*等
  paths:
    - /home/bagpipes/emqx/log/emqx.log.*
    - /home/bagpipes/emqx/log/abc.*.txt
  encoding: GB2312
  ####fields 自定义字段与值,这个在检索日志时使用,
  ###会给每条日志增加此key与value,能够标识出日志来源。
  fields:
    ip: 10.211.55.5
  # fields_under_root如果为false,则fields下的key会挂到fields下,true的话
  fields_under_root: true
  multiline:
    type: pattern
    pattern: '^\d{4}-\d{1,2}-\d{1,2}T\d{1,2}:\d{1,2}:\d{1,2}.\d{6}\+\d{1,2}:\d{1,2}'
    negate: true
    match: after
output.logstash:
  hosts: ["10.211.55.5:5044"]

6.3 启动

|-----|------------------------------------------------------------------------------|
| 1 2 | ## 后台启动: nohup .``/filebeat -e -c filebeat.yml >``/dev/null 2>&1 & |

6.4 验证

进程启动验证:

七、完整应用验证

首先所有服务都正常启动。

7.1 F ilebeat验证

如何通过filebeat数据正常处理完成并输出符合预期的内容,可以采用输出到控制台进行调试验证,在filebeat.yml配置文件中调整输出为控制台方式:

7.2 L ogstash验证

如何通过logstash数据正常处理完成并输出符合预期的内容,可以采用输出到控制台进行调试验证,在logstash.conf 配置文件中调整输出为控制台方式:

7.3 ES验证

通过地址api查看是否有相应的索引自动创建并占用存储:http://IP:9200/_cat/indices?v

7.4 K ibana验证

7.4.1 创建索引模版

按照截图中,进入management 中,选择"stack management"

7.4.2 查看索引

点击"Discover"

进入日志查询界面

相关推荐
Elastic 中国社区官方博客19 小时前
我们如何通过 70 多个拉取请求,将 OpenTelemetry Java agent 迁移到 invokedynamic
java·大数据·开发语言·elasticsearch·搜索引擎·全文检索·es
梅菲塔亚1 天前
ELK企业日志分析系统实战部署
elk
BreezeJiang2 天前
写了 Dockerfile 却没生效:ES + Kibana 的 compose 配置里,藏着三个反直觉的点
elasticsearch
Elasticsearch2 天前
Elastic 计划利用 NVIDIA RTX GPU 将 Jina 模型推理速度提升至 8 倍
elasticsearch
Elastic 中国社区官方博客2 天前
告别繁琐控制台:Kabanos 如何将 MongoDB Compass 的易用性带入 Elasticsearch
大数据·数据库·mongodb·elasticsearch·搜索引擎·全文检索
Elastic 中国社区官方博客2 天前
控制告警如何触发、恢复和发送通知:Elastic 可观测性中的 Kibana 通用告警
大数据·数据库·安全·elasticsearch·搜索引擎·全文检索·es
深海里的鱼(・ω<)★2 天前
SMB备份导致的 Gitea 分支推送成功但界面不可见故障复盘
大数据·elasticsearch·gitea
SL-staff2 天前
JVS私有化部署运维避坑指南:Kafka容灾、ES冷热分离、RabbitMQ可观测性三实战检查项
elasticsearch·kafka·jvs运维·es冷热分离·rabbitmq监控·中间件巡检·sre实践
Elasticsearch2 天前
我们如何通过 70 多个拉取请求,将 OpenTelemetry Java agent 迁移到 invokedynamic
elasticsearch
Elasticsearch2 天前
将 Elastic 引入 Claude:原因、方法与注意事项
elasticsearch