09-ELK环境搭建

简介: 基于ElasticSearch、Kibana、Filebeat构建日志系统,实现日志采集、解析、展示与过期删除。部署于192.168.xxx.xxx,使用ELK 8.15.0版本,通过Pipeline解析日志,CCE容器化部署filebeat,支持多级日志管理与中文界面展示。

环境说明

方案:使用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
  1. 通过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


配置项目的日志格式

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

<!--按空格拆分:[0 1]时间-date [2]追踪ID [3]用户 [4]线程名称-thread [5]日志等级-level [6]logger类名-class [7]主要信息-message   -->
<property name="ENCODER_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{log_opid}] [%X{log_userid }] [%thread] %-5level %logger{80} - %msg%n" />

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


配置项目的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-filebeatfilebeat.yml挂载到/usr/share/filebeat/filebeat.yml(注意配置子路径)

HostPath/tmp/logs/挂载到容器的/tmp/logs/

配置应用亲和,亲和 myproject-app应用。


查看日志

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

目录
相关文章
|
Ubuntu Linux KVM
分享一些OpenStack的qcow2格式实例镜像
分享一些OpenStack的qcow2格式实例镜像
15804 1
分享一些OpenStack的qcow2格式实例镜像
|
人工智能 负载均衡 数据可视化
10分钟上手全球开源模型冠军 Qwen3
阿里通义千问Qwen3在最新全球AI基准测试中智能水平位列全球前五,开源第一,且成本优势显著,推理成本仅为DeepSeek-R1的1/3、Claude 3.7的1/20。Qwen3支持119种语言,具备强大的代码和数学能力,同时提供思考与非思考两种模式无缝切换,适合复杂与简单任务。通过阿里云百炼平台,用户可在10分钟内快速搭建Qwen3模型服务,结合Cherry Studio客户端实现便捷交互。本文详细介绍了Qwen3的部署、体验及工具调用能力,帮助用户轻松上手。
1769 79
|
1月前
|
Java Maven 数据安全/隐私保护
06-nexus私仓环境搭建
本文详细介绍Nexus Repository Manager OSS的安装与配置,涵盖JDK环境准备、服务部署、用户创建及启动操作。指导用户搭建Maven和Docker私有仓库,实现jar包与镜像的上传下载,并配置匿名访问与本地客户端信任。支持多种仓库类型,适用于企业级制品管理。
154 0
|
1月前
|
Java Maven 数据安全/隐私保护
Nexus仓库
本文介绍了Nexus Repository Manager的Linux安装与配置,包括JDK环境搭建、OSS版下载、解压启动、仓库管理及Docker部署方式。详细说明了登录、密码重置、仓库创建、Maven/NPM/Docker私服配置与资源上传等操作,并提供常用命令与配置示例,助力高效搭建私有仓库。
170 0
|
1月前
|
关系型数据库 MySQL Docker
03-Docker下载加速 docker下载加速
本文介绍了两种Docker镜像下载加速方法:一是使用网易数帆、阿里云等镜像仓库直接拉取镜像,如通过`hub.c.163.com/library/mysql`下载MySQL;二是配置阿里云镜像加速器,修改`/etc/docker/daemon.json`文件添加加速地址,重启Docker服务后即可使用官方镜像命令快速拉取。此外,还介绍了如何为Docker配置HTTP/HTTPS代理,提升网络访问效率。
212 0
|
1月前
|
缓存 Ubuntu Linux
02-Docker安装 CentOS安装Docker
本文详细介绍在CentOS和Ubuntu系统上安装、配置及卸载Docker的完整步骤,包括配置阿里云镜像加速、离线安装方法、设置开机自启与命令补全,助你快速部署并测试Docker环境。
160 0
ELK 圣经:Elasticsearch、Logstash、Kibana 从入门到精通
ELK是一套强大的日志管理和分析工具,广泛应用于日志监控、故障排查、业务分析等场景。本文档将详细介绍ELK的各个组件及其配置方法,帮助读者从零开始掌握ELK的使用。
|
11月前
|
人工智能 Devops 虚拟化
VMware vSphere 8.0 Update 3d 下载 - 企业级工作负载平台
VMware vSphere 8.0 Update 3d 下载 - 企业级工作负载平台
2107 17
|
7月前
|
运维 数据可视化 网络安全
四步搞定网站部署!Websoft9让多应用托管变得如此简单
Websoft9 是一款开源的服务器应用管理平台,帮助用户快速、安全地部署网站。通过简化复杂的流程,它将部署操作分为四个直观步骤,即使是技术小白也能轻松搭建专业网站。平台支持多应用集成、自动化部署和可视化运维,显著提升效率并降低维护成本。
479 0
四步搞定网站部署!Websoft9让多应用托管变得如此简单
|
8月前
|
安全 应用服务中间件 网络安全
从零(服务器、域名购买)开始搭建雷池WAF到应用上线简明指南
本文详细介绍了基于雷池WAF的网站防护部署全流程,涵盖服务器与域名准备、WAF安装配置、网站接入设置及静态文件站点搭建等内容。通过最低1核CPU/1GB内存的服务器配置,完成Docker环境搭建、雷池一键安装及端口设置,实现域名解析、SSL证书配置和防护策略优化。同时支持301重定向与HTTP到HTTPS自动跳转,确保访问安全与规范。最后还提供了使用静态文件搭建网站的方法,帮助用户快速构建具备基础WAF防护能力的网站系统。
从零(服务器、域名购买)开始搭建雷池WAF到应用上线简明指南

热门文章

最新文章