09-ELK环境搭建

简介: 基于ElasticSearch、Kibana、Filebeat构建日志系统,部署于192.168.xxx.xxx服务器。通过Filebeat采集应用日志,ES存储并解析,Kibana展示与搜索,结合Pipeline实现字段提取,配置ILM策略自动清理7天前日志,完成高效集中式日志管理。

环境说明
方案:使用ElasticSearch保存日志,使用Kibana进行日志展示、搜索、过期删除,使用 ElasticSearch 的pipeline进行日志的解析,使用 filebeat 采集日志发送给ElasticSearch。使用服务器192.168.xxx.xxx进行部署。

准备:
● 从官网下载 ElasticSearch(elasticsearch-8.15.0-linux-x86_64.tar.gz)上传到服务器
● 从官网下载 kibana(kibana-8.15.0-linux-x86_64.tar.gz)上传到服务器
● 从官网下载 elastic/filebeat 的docker镜像,推送到cce镜像仓库

部署环境
环境检查
检查vm.max_map_count的大小,要求该值至少为262144:
sysctl -n vm.max_map_count
如果该值不满足要求,可以修改/etc/sysctl.conf文件,在该文件中新增一行或者修改vm.max_map_count:
vm.max_map_count=262144

检查ulimit的值:

检查ulimit的值

ulimit -n
修改ulimit的值为65536:
ulimit -n 65536

配置防火墙:

开启elasticsearch、kibana的相关端口

firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --zone=public --add-port=9300/tcp --permanent
firewall-cmd --zon=public --add-service=http --permanent
firewall-cmd --zone=public --add-port=5601/tcp --permanent
firewall-cmd --reload

部署ElasticSearch
将 ElasticSearch 解压:
tar -zxvf elasticsearch-8.15.0-linux-x86_64.tar.gz
调整 ElasticSearch的配置文件:config/elasticsearch.yml:
cluster.name: elk-cluster
node.name: node-1
path.data: /home/elk/elasticsearch-workspace/data
path.logs: /home/elk/elasticsearch-workspace/logs

network.host: 0.0.0.0
cluster.initial_master_nodes: ["node-1"]
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate

CA 证书名称为下面步骤中生成的CA证书名称

xpack.security.transport.ssl.keystore.path: elasticsearch-certificates.p12
xpack.security.transport.ssl.truststore.path: elasticsearch-certificates.p12
创建对应的文件夹:
● /home/elk/elasticsearch-workspace/data:数据文件夹
● /home/elk/elasticsearch-workspace/logs:日志文件夹

生成证书:

  1. 生成CA:

    生成CA,一路回车

    默认的ca文件为 config/elastic-stack-ca.p12

    bin/elasticsearch-certutil ca
  2. 通过CA生成证书:

    在config下生成证书elasticsearch-certificates.p12

    bin/elasticsearch-certutil cert -out config/elasticsearch-certificates.p12 -pass "" --ca elastic-stack-ca.p12

启动ElasticSearch:

-d 后台启动

bin/elasticsearch -d
配置用户密码:

interactive交互式启动(即自己设置密码)

执行后会提示为相关用户设置密码。为方便记忆,此处全部设置为123456

bin/elasticsearch-setup-passwords interactive

访问ElasticSearch:http://192.168.xxx.xxx:9200
如果提示需要用户密码,输入用户elastic,密码123456(即上面设置的密码)

关闭elasticsearch:

查看elastic相关进程进行kill

ps -ef | grep elastic

部署kibana
解压Kibana:
tar -zxvf kibana-8.15.0-linux-x86_64.tar.gz
调整Kibana配置文件:config/kibana.yml

端口号,默认5601

server.port: 5601

设置为0.0.0.0,允许访问

server.host: "0.0.0.0"

填写elastic的地址、用户、密码等信息

elasticsearch.hosts: ["http://localhost:9200"]
elasticsearch.username: "kibana"
elasticsearch.password: "123456"

设置publicBaseUrl,最后面不要带斜杠

server.publicBaseUrl: "http://192.168.xxx.xxx:5601"

设置国际化语言中文

i18n.locale: "zh-CN"

启动kibana:

nohup方式访问

nohup ./bin/kibana &

访问kibana:http://192.168.xxx.xxx:5601/
如果提示需要用户密码,输入用户elastic,密码123456(即elasticsearch设置的密码)

关闭Kibana:

kibana会启动一个node进程,查看node相关进程,进行kill

ps -ef | grep node

配置项目的日志格式
调整项目的日志格式,使其成为固定格式,例如:


调整日志的输出路径、日志名称、日志级别等信息

配置项目的ELK索引信息
通过向ElasticSearch发送相关请求,创建项目的索引信息。
创建生命周期策略myproject-strategy:
// PUT _ilm/policy/myproject-strategy
{
"policy": {
"phases": {
"hot": {
"min_age": "0ms",
"actions": {
"set_priority": {
"priority": 100
}
}
},
// 超过7天的删除
"delete": {
"min_age": "7d",
"actions": {
"delete": {
"delete_searchable_snapshot": true
}
}
}
}
}
}

创建索引模板:myproject-app
// PUT _index_template/myproject-app
{
"template": {
"settings": {
"index": {
"lifecycle": {
"name": "myproject-strategy"
}
}
}
},
"index_patterns": [
"myproject-app-*"
]
}

创建pipeline:myproject-logback-pipeline
// PUT _ingest/pipeline/myproject-logback-pipeline

{
"description": "logback-pipeline",
"processors": [
{
"split": {
"field": "message",
"target_field": "message_array",
"separator": "\s+"
}
},
{
"set": {
"field": "log_date",
"if": "ctx.message_array.length>0",
"value": "{ {message_array.0}}"
}
},
{
"set": {
"field": "log_timestamp_array",
"if": "ctx.message_array.length>0 && ctx.message_array.length>1",
"value": ["{ {message_array.0}}", "{ {message_array.1}}"]
}
},
{
"join": {
"field": "log_timestamp_array",
"separator": " "
}
},
{
"date": {
"field": "log_timestamp_array",
"target_field": "log_timestamp",
"formats": ["yyyy-MM-dd HH:mm:ss.SSS"],
"timezone": "Asia/Shanghai"
}
},
{
"set": {
"field": "log_opid",
"if": "ctx.message_array.length>2",
"value": "{ {message_array.2}}"
}
},
{
"set": {
"field": "log_userid",
"if": "ctx.message_array.length>3",
"value": "{ {message_array.3}}"
}
},
{
"set": {
"field": "thread",
"if": "ctx.message_array.length>4",
"value": "{ {message_array.4}}"
}
},
{
"set": {
"field": "level",
"if": "ctx.message_array.length>5",
"value": "{ {message_array.5}}"
}
},
{
"set": {
"field": "logger",
"if": "ctx.message_array.length>6",
"value": "{ {message_array.6}}"
}
},
{
"remove": {
"field": "message_array"
}
}
]
}

部署filebeat
filebeat需要能够读取到云上myproject项目的日志,所以需要将myproject项目的日志映射出来。可以使用以下几种方案:
● 方案1:使用PVC,将项目日志映射到PVC上,filebeat也挂载该PVC,读取其中的日志
● 方案2:filebeat配置节点亲和配置为亲和myproject项目,使得filebeat的pod和myproject项目pod运行在同一个节点。将myproject日志映射到节点主机HostPath上,filebeat也挂载主机的HostPath,读取其中的日志
CCE云上现在没有PVC配额,目前采用方案2。

添加一个ConfigMap myproject-filebeat:其中配置filebeat.yml
filebeat.inputs:

  • type: filestream
    enabled: true
    id: filestream-myproject-app
    paths:
    • /tmp/logs/myproject/myproject.log
      fields:
      sourceSystem: myproject-app
      profile: dev
      project: web
      level: all
      pod: ${POD_IP:"-"}
      fields_under_root: true
      parsers:
    • multiline:
      type: pattern
      pattern: '^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}.\d{3}\s[[\w.-]]\s[[\w.-]]\s[[\w.-]*]\s[A-Z]{4,5}\s'
      negate: true
      match: after

setup:
template:
enabled: false
name: "myproject-app"
pattern: "myproject-app-*"
overwrite: true
settings:
index.number_of_shards: 1
ilm:
enabled: false

output.elasticsearch:
hosts: ["192.168.xxx.xxx:9200"]
username: "elastic"
password: "123456"
index: "myproject-app-dev-%{+yyyy.MM.dd}"
pipeline: "myproject-logback-pipeline"

创建工作负载myproject-filebeat,镜像使用elastic/filebeat:8.15.0。
数据存储中,将myproject-filebeat的filebeat.yml挂载到/usr/share/filebeat/filebeat.yml(注意配置子路径)
将HostPath的/tmp/logs/挂载到容器的/tmp/logs/。
配置应用亲和,亲和 myproject-app应用。

查看日志
访问Kibana即可查看相关日志:http://192.168.xxx.xxx:5601/

相关文章
SVN 将文件还原到之前的指定版本
SVN 将文件还原到之前的指定版本
3921 1
SVN 将文件还原到之前的指定版本
|
缓存 Linux 测试技术
安装【银河麒麟V10】linux系统--并挂载镜像
安装【银河麒麟V10】linux系统--并挂载镜像
9852 0
|
3月前
|
人工智能 移动开发 安全
OpenClaw 本地 AI 一键生成 HTML5 企业网站教程
OpenClaw(小龙虾)是本地离线AI建站工具,Windows一键部署、解压即用,无需代码基础。通过自然语言描述需求,AI自动生成标准HTML5静态网站源码(含HTML/CSS/JS),全程离线、数据不外泄。30分钟即可完成企业官网创建、调试与上线,安全高效,适合零基础用户及中小企业。(239字)
589 2
|
4月前
|
监控 Java 数据库连接
Java 线程池核心参数设计与生产环境调优实战
本文系统解析Java线程池核心原理:详解七大参数(corePoolSize、maximumPoolSize等)、执行流程、队列类型选择及拒绝策略;深入讲解生产环境动态调优方法,含Spring Boot实战代码;并提供线程泄露与任务堆积的排查思路、工具及解决方案。
444 3
|
7月前
|
SQL 关系型数据库 数据库
阿里云RDS数据库介绍:产品功能、实例规格、收费标准餐参考
阿里云RDS是企业级云端数据库服务,支持MySQL、SQL Server、PostgreSQL等主流引擎,以高可用性、弹性扩展、安全防护及智能化管理为核心优势。提供倚天版、Serverless实例等规格,适配高性能计算与负载波动场景。功能涵盖全密态加密、自动扩缩容、集群高可用架构及自治运维服务。计费模式灵活,包括包年包月、按量付费、Serverless等,结合优惠活动降低企业成本。
|
存储 编译器 Linux
动态链接的魔法:Linux下动态链接库机制探讨
本文将深入探讨Linux系统中的动态链接库机制,这其中包括但不限于全局符号介入、延迟绑定以及地址无关代码等内容。
2455 141
|
存储 数据可视化 知识图谱
高效知识管理的五大方法,助力写作更上一层楼
在信息爆炸的时代,高效的知识管理是提升写作效率与质量的关键。本文探讨如何通过系统化的知识获取、分类存储、动态更新和高效检索,构建个人知识体系,并介绍智能化工具如看板的应用,帮助写作者整合信息、激发灵感、优化流程,实现从输入到输出的闭环,持续提升创作能力。
490 14
高效知识管理的五大方法,助力写作更上一层楼
|
SQL 关系型数据库 MySQL
分享一个 .Net core Console 项目使用 SqlSugar 的详细例子
分享一个 .Net core Console 项目使用 SqlSugar 的详细例子
1126 0
|
安全 应用服务中间件 网络安全
从零(服务器、域名购买)开始搭建雷池WAF到应用上线简明指南
本文详细介绍了基于雷池WAF的网站防护部署全流程,涵盖服务器与域名准备、WAF安装配置、网站接入设置及静态文件站点搭建等内容。通过最低1核CPU/1GB内存的服务器配置,完成Docker环境搭建、雷池一键安装及端口设置,实现域名解析、SSL证书配置和防护策略优化。同时支持301重定向与HTTP到HTTPS自动跳转,确保访问安全与规范。最后还提供了使用静态文件搭建网站的方法,帮助用户快速构建具备基础WAF防护能力的网站系统。
从零(服务器、域名购买)开始搭建雷池WAF到应用上线简明指南
|
消息中间件 Kafka 网络安全
消息中间件系列教程(20) -Kafka-集群搭建
消息中间件系列教程(20) -Kafka-集群搭建
1095 0