ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

EFK日志平台搭建

2022-06-25 20:00:08  阅读:183  来源: 互联网

标签:index 06 zeus EFK music 2022 日志 搭建



title: EFK日志平台搭建
date: 2022-06-25 11:14:47
tags:
- EFK
categories:
- ElasticSearch
- FileBeat
- Kibana


前言

日志平台对于开发者来说自然不陌生,无论是处于开发阶段还是测试阶段亦或者是项目一上线后,一个优秀的日志平台能够节省大量的时间。

常见日志平台有ELK也就是ElasticSeatch+Logstash+Kibana组成的一套系统。这套系统劣势就在于Logstash的性能有些不是很理想,官方都有些嫌弃它emmm。

还有阿里的Logtail也是一个不错的选择,性能也是极好,当然是收费的,对于中小型企业或白嫖爱好者不太友好。

接下来就是本章的主角: EFK,它于ELK不同的是使用了FileBeat替换了Logstash

本章就简单记录一下如何使用EFK整合日志文件,实现一个实时的日志查询平台。

注: EFK使用版本为7.6.0

ElasticSearch安装

ES下载地址

下载解压即可使用.

如果有需要修改配置,可直接修改config/elasticsearch.yml文件。

#配置的集群名称,默认是elasticsearch,es服务会通过广播方式自动连接在同一网段下的es服务,通过多播方式进行通信,同一网段下可以有多个集群,通过集群名称这个属性来区分不同的集群。
cluster.name: zeus-platform


# 当前ES服务节点的名称
node.name: node-1

# 指定该节点是否有资格被选举成为node
#(注意这里只是设置成有资格, 不代表该node一定就是master),默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master。
node.master: true

# 指定该节点是否存储索引数据,默认为true。
node.data: true

# 设置默认索引分片个数,默认为5片。
#index.number_of_shards: 5

# 设置默认索引副本个数,默认为1个副本。如果采用默认设置,而你集群只配置了一台机器,那么集群的健康度为yellow,也就是所有的数据都是可用的,但是某些复制没有被分配
# (健康度可用 curl 'localhost:9200/_cat/health?v' 查看, 分为绿色、黄色或红色。绿色代表一切正常,集群功能齐全,黄色意味着所有的数据都是可用的,但是某些复制没有被分配,红色则代表因为某些原因,某些数据不可用)。
#index.number_of_replicas: 1

# 设置临时文件的存储路径,默认是es根目录下的work文件夹。
#path.work: /path/to/work

# 设置日志文件的存储路径,默认是es根目录下的logs文件夹 
#path.logs: /path/to/logs

# 设置插件的存放路径,默认是es根目录下的plugins文件夹, 插件在es里面普遍使用,用来增强原系统核心功能。
#path.plugins: /path/to/plugins

#允许访问的网域
network.host: 0.0.0.0

# 设置对外服务的http端口,默认为9200。
http.port: 9200

# 设置节点之间交互的tcp端口,默认是9300。
transport.tcp.port: 9300


#请确保 cluster.initial_master_nodes 中的值与 node.name 完全匹配
cluster.initial_master_nodes: ["node-1"]

如果需要修改es所占用内存可以修改config/jvm.options文件。

进入bin目录启动es.

./elasticsearch 
# 后台启动
./elasticsearch -d

Ik分词器安装

下载地址

直接解压后放到ElasticSearch的``

Kibana安装

下载地址

直接解压

修改config/kibana.yml文件

# 服务端口
server.port: 5601
# 服务host
server.host: "localhost"
# 所要连接的ElasticSearch集群地址
elasticsearch.hosts: ["http://localhost:9200"]

# 如果es需要认证,需要指定用户名和密码
#elasticsearch.username: "kibana"
#elasticsearch.password: "pass"

# Kibana 中文汉化
i18n.locale: "zh-CN"

回到bin目录启动kibana

./kibana

FileBeat安装及配置

下载地址

直接解压即可

1. 创建索引模板

也就是日志消息最终会被解析称的文档结构。

# 创建filebeat zeus-music采集模块 解析日志所需要的模板
PUT _template/zues_music_template
{
  "order": 1,
  "index_patterns": [
      "zues_music_log-*"
  ], 
  "settings": {
    "index":{
      "number_of_shards": "1",
      "auto_expand_replicas": "0-1",
      "lifecycle":{
        "name": "zues_music_log",
        "rollover_alias":"zues_music_log"
      },
      "mapping":{
        "total_fields":{
          "limit": "10000"
        }
      }
    }
  },
  //模板字段
  "mappings": {
    "properties": {
      //服务名
      "appName":{
        "type": "keyword"
      },
      //追踪ID
      "traceId": {
        "type": "keyword"
      },
      //日志级别
      "level":{
        "type": "keyword"
      },
      //日志消息
      "message":{
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_max_word",
        "norms": false
      },
      //时间戳
      "@timestamp":{
        "type": "date"
      }
    }
  },
  "aliases": {
    
  }
}

2. 创建解析管道

用于用一段字符串中提取部分数据.

比如本项目日志格式如下:

[zeus-music] 2022-06-25 18:39:29 INFO 4703 [default] [main] com.zero.music.ZeusMusicApplication 这是一条日志

所对应的grok格式

\[%{USERNAME:appName}\] %{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{NUMBER:pid} \[%{USERNAME:traceId}\]

ElasticSearch会将这段日志解析成一个json格式

zeus-music值 赋值到appName

2022-06-25 18:39:29 赋值到timestamp属性中

INFO值 赋值到level属性中。

4703 赋值到pid属性中。

default赋值到traceId属性中。

其实就是一个映射过程。

最终会解析成:

{
  "appName": [
    [
      "zeus-music"
    ]
  ],
  "timestamp": [
    [
      "2022-06-25 18:39:29"
    ]
  ],
  "YEAR": [
    [
      "2022"
    ]
  ],
  "MONTHNUM": [
    [
      "06"
    ]
  ],
  "MONTHDAY": [
    [
      "25"
    ]
  ],
  "HOUR": [
    [
      "18",
      null
    ]
  ],
  "MINUTE": [
    [
      "39",
      null
    ]
  ],
  "SECOND": [
    [
      "29"
    ]
  ],
  "ISO8601_TIMEZONE": [
    [
      null
    ]
  ],
  "level": [
    [
      "INFO"
    ]
  ],
  "pid": [
    [
      "4703"
    ]
  ],
  "BASE10NUM": [
    [
      "4703"
    ]
  ],
  "traceId": [
    [
      "default"
    ]
  ]
}

在ElasticSearch中 创建 pipeline

# 创建filebeat zeus-music采集模块 所需要用到的pipeline
PUT /_ingest/pipeline/zeus_music_pipeline
{
  //描述
  "description": "zeus_music_pipeline",
  //处理过程
  "processors": [
    {
      "grok": {
        //所要处理的字段名,为zues_music_template中的message字段
        "field": "message",
        "patterns": [
          "\\[%{USERNAME:appName}\\] %{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{NUMBER:pid} \\[%{USERNAME:traceId}\\]"
          ],
        "pattern_definitions": {
          "ALL_CODE": "(\n)*"
        }
      },
      //删除 filebeat自带的时间戳字段
      "remove": {
        "field": "@timestamp"
      }
    },
    {
      // 使用自己日志中的时间
      "date": {
        "field": "timestamp",
        "formats": ["yyyy-MM-dd HH:mm:ss"],
        "timezone": "Asia/Shanghai",
        "target_field": "@timestamp"
      },
      "remove": {
        "field": "timestamp"
      }
    }
  ]
}

3. 创建所需配置文件

filebeat目录下创建一个yml文件,作为启动时配置。

touch zeus_music.yml

然后将filebeat.yml文件内容拷贝过来,进行修改。

#=========================== Filebeat inputs =============================

## 数据采集配置
filebeat.inputs:

#采集类型: 基于日志文件模式采集
- type: log

  # 启用该采集模块
  enabled: true

  # 所要采集的日志文件源
  paths:
    - /usr/local/myproject/music/zeus-music/logs/application/all/*.log
  
  # 该模块标签
  tags: ['zeus-music']

  # 多行日志的前缀,根据该前缀判断是否是同一条日志信息
  multiline.pattern: ^\[zeus-music\]
  # 开启多行错误日志合并
  multiline.negate: true
  multiline.match: after

  #可选的附加字段。这些田地可以自由采摘
  #向爬取的日志文件添加额外信息以进行过滤
  fields:
    # 日志收集到后,使用该模板来解析日志,映射成json文档,这样才能插入到es中
    # 在es中定义该模板
    index: "zues_music_template"


#============================= Filebeat modules ===============================

filebeat.config.modules:
  # Glob pattern for configuration loading
  path: ${path.config}/modules.d/*.yml

  # Set to true to enable config reloading
  reload.enabled: false


#==================== Elasticsearch template setting ==========================
# 索引模板配置
setup.template.settings:
  index.number_of_shards: 1
  # 开启使用索引模板
  setup.template.enabled: true
  # 要使用的索引模板名称
  setup.template.name: 'zues_music_template'
  # 模板的 index_patterns
  setup.template.pattern: 'zues_music_log-*'
  # 关闭索引生命周期
  setup.ilm.enabled: false

output.elasticsearch:
  # ES地址配置
  hosts: ["localhost:9200"]
  # 日志索引库生成规则,每日的日志生成一个索引
  indices:
    - index: 'zues_music_log-%{+yyyy.MM.dd}'
      when.contains:
        fields:
          index: 'zues_music_template'
        #tags: 'zeus-music'
  # 日志解析所需的pipeline
  pipeline: "zeus_music_pipeline"


processors:
  # 过滤一起自带的元素字段属性
  - drop_fields:
      fields: ["log","host","input","agent","ecs"]
      ignore_missing: false

ok,现在基本上已经配置完成.

4. 启动

  1. 启动ESKibana程序。

  2. 启动filebeat,加载配置好的配置文件。

./filebeat -e -c zeus_music.yml

正常启动日志

2022-06-25T19:10:28.909+0800	INFO	log/harvester.go:297	Harvester started for file: /usr/local/myproject/music/zeus-music/logs/application/all/zeus-music.log
2022-06-25T19:10:29.921+0800	INFO	pipeline/output.go:95	Connecting to backoff(elasticsearch(http://localhost:9200))
2022-06-25T19:10:29.970+0800	INFO	elasticsearch/client.go:757	Attempting to connect to Elasticsearch version 7.6.0
2022-06-25T19:10:30.012+0800	INFO	[license]	licenser/es_callback.go:50	Elasticsearch license: Basic
2022-06-25T19:10:30.040+0800	INFO	[index-management]	idxmgmt/std.go:258	Auto ILM enable success.
2022-06-25T19:10:30.042+0800	INFO	[index-management.ilm]	ilm/std.go:139	do not generate ilm policy: exists=true, overwrite=false
2022-06-25T19:10:30.042+0800	INFO	[index-management]	idxmgmt/std.go:271	ILM policy successfully loaded.
2022-06-25T19:10:30.042+0800	INFO	[index-management]	idxmgmt/std.go:410	Set setup.template.name to '{filebeat-7.6.0 {now/d}-000001}' as ILM is enabled.
2022-06-25T19:10:30.043+0800	INFO	[index-management]	idxmgmt/std.go:415	Set setup.template.pattern to 'filebeat-7.6.0-*' as ILM is enabled.
2022-06-25T19:10:30.043+0800	INFO	[index-management]	idxmgmt/std.go:449	Set settings.index.lifecycle.rollover_alias in template to {filebeat-7.6.0 {now/d}-000001} as ILM is enabled.
2022-06-25T19:10:30.043+0800	INFO	[index-management]	idxmgmt/std.go:453	Set settings.index.lifecycle.name in template to {filebeat {"policy":{"phases":{"hot":{"actions":{"rollover":{"max_age":"30d","max_size":"50gb"}}}}}}} as ILM is enabled.
2022-06-25T19:10:30.048+0800	INFO	template/load.go:89	Template filebeat-7.6.0 already exists and will not be overwritten.
2022-06-25T19:10:30.048+0800	INFO	[index-management]	idxmgmt/std.go:295	Loaded index template.
2022-06-25T19:10:30.051+0800	INFO	[index-management]	idxmgmt/std.go:306	Write alias successfully generated.
2022-06-25T19:10:30.052+0800	INFO	pipeline/output.go:105	Connection to backoff(elasticsearch(http://localhost:9200)) established
2022-06-25T19:10:28.909+0800	INFO	log/harvester.go:297	Harvester started for file: /usr/local/myproject/music/zeus-music/logs/application/all/zeus-music.log

可以看到,已经正常加载了日志目录的日志文件。

不出意外的话,此时你的ElasticSearch已经生成了一个索引库zues_music_log-2022.06.25

5. 踩坑重点

  1. 使用Grok解析日志一定要用日志文件内的日志信息为例,控制台与文件内的格式可能有些不同。
  2. 通过Grok解析日志抽取的字段名称与ES模板中的字段名是对应的。切记!切记!切记! 我叼nmd。

使用Kibana美化日志查询

进入索引模式

创建索引模式

选择要查看的所有日志索引库

设置筛选字段

进入查看页面

标签:index,06,zeus,EFK,music,2022,日志,搭建
来源: https://www.cnblogs.com/zero9501/p/16412301.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有