ELK配置和使用说明

Elastic Stack 简介与安装一、简介Elastic Stack 技术栈,简称ELK。包含的核心组件是Beats(Filebeat、Metricbeat等)、Logstash、Elasticsearch、Kibana。官网:https://www.elastic.co/cn/本次使用的组件版本号:filebeat-7.8.0-linux-x86_64logstash-7.8.0elasticsearch-7.8.0-x86_64注:目前Elastic Stack所有组件,官网
摘要由CSDN通过智能技术生成

Elastic Stack 简介与安装

一、简介

Elastic Stack 技术栈,简称ELK。包含的核心组件是Beats(Filebeat、Metricbeat等)、Logstash、Elasticsearch、Kibana。

官网:https://www.elastic.co/cn/

本次使用的组件版本号:

  • filebeat-7.8.0-linux-x86_64
  • logstash-7.8.0
  • elasticsearch-7.8.0-x86_64

注:

目前Elastic Stack所有组件,官网都是建议使用同一版本号的,目前使用的都是7.8.0。若已对ELK有基础的了解,可以直接查看第二章——安装。

1、部署架构图

2、流程图

3、Filebeat

Filebeat是日志收集器。用于监控、收集服务器日志文件。主要有以下三个重要概念:输入,收集器和输出。

3.1 输入

输入可以指定:file, stdin, redis, udp, docker, tcp, syslog。

5G小基站采集日志指定的输入为file,直接读取日志文件。

3.2 收集器

1)对于每个单独的文件,会启动一个收集器按行读取文件,并发送到输出端。

2)收集器负责管理文件描述符,即使一个文件被重命名了,它仍会继续读该文件。

3)当日志内容一段时间没有变化时,收集器会关闭。

3.3 输出

输出可以指定:elasticsearch, logstash, kafka, redis, file, console, cloud。

5G小基站日志的输出为logstash,采集的日志会平均发往多个logstash进行过滤。

3.4 消息队列

Filebeat使用一个内部队列来暂时存储消息,有内存队列和磁盘队列两种形式。消息队列会等待输出的应答,如果队列满了,就不再接收新消息。

5G小基站采集日志使用内存队列。

3.5 Filebeat工作原理

Filebeat由两个主要组件组成:prospector 和 harvester。

  • harvester

    • 负责读取单个文件的内容。
    • 如果文件在读取时被删除或重命名,Filebeat将继续读取文件。
  • prospector

    • prospector 负责管理harvester并找到所有要读取的文件来源。
    • 如果输入类型为日志,则查找器将查找路径匹配的所有文件,并为每个文件启动一个harvester。
    • Filebeat目前支持两种prospector类型:log和stdin。
  • Filebeat如何保持文件的状态

    • Filebeat 保存每个文件的状态并经常将状态刷新到磁盘上的注册文件中。
    • 该状态用于记住harvester正在读取的最后偏移量,并确保发送所有日志行。
    • 如果输出(例如Elasticsearch或Logstash)无法访问,Filebeat会跟踪最后发送的行,并在输出再次可用
      时继续读取文件。
    • 在Filebeat运行时,每个prospector内存中也会保存的文件状态信息,当重新启动Filebeat时,将使用注册
      文件的数据来重建文件状态,Filebeat将每个harvester在从保存的最后偏移量继续读取。
    • 文件状态记录在data/registry文件中。
3.6 配置说明

输入、采集规则、输出均可在filebeat.yml中配置,配置文件说明如下:

#======================= Filebeat inputs =============================
filebeat.inputs:
- type: log #输入类型
  enabled: true #启用或禁用这段配置
  paths: #日志文件名正则匹配
    - ${ACSDIR}/logs/*.log
    - ${ACSDIR}/logs/*.log.20[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]
  encoding: gbk #日志编码
  include_lines: ['WARN -', 'ERROR-', 'INFO -', 'DEBUG-'] #采集包含指定内容的行
  exclude_files: ['\.swp$'] #需要排除日志文件的正则表达
  tags: ["init-serice"] #标识

- type: log #同上
  enabled: true
  paths:
    - ${ACSDIR}/logs/record/*.[0-9]*.log
    - ${ACSDIR}/logs/record/*.[0-9]*.log.20[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]
  encoding: gbk
  exclude_files: ['\.swp$']
  tags: ["init_service_record"]

#======================= Filebeat modules===========================
filebeat.config.modules: #filebeat内部模块的配置
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false

#========================= Outputs ================================
#----------------------------- Logstash output --------------------------------
output.logstash: #指定Logstash作为输出
  enabled: false #启用或禁用
  hosts: ["10.17.0.8:5044","10.17.0.6:5044"] #ip、port
  #loadbalance: true #负载均衡

#------------------------------- Redis output ---------------------------------
output.redis: #指定redis作为输出
  enabled: true #启用或禁用
  hosts: ["10.17.0.6:7001"] #ip、port

#=========================Xpack Monitoring =========================
xpack.monitoring: #监控配置
  enabled: true #启用或禁用
  elasticsearch:
   hosts: ["10.17.0.6:9200"] #ip、port
   username: beats_system
   password: beatspassword

注:以上配置是列举的一些常用配置,并不是项目中使用的实际配置。

4、Logstash

Logstash作为日志转发与过滤模块,主要由输入,过滤器和输出三部分组成。

4.1 输入

输入可以指定file, syslog, redis, beats,从输入采集消息送至过滤器。支持的输入

5G小基站日志收集过程中Logstash指定的输入为Filebeat。

4.2 过滤器

过滤器使Logstash可以对消息进行各式各样的处理,功能非常丰富,但是指定了过多过滤条件的话,CPU使用率也有直线上升,所以日记格式在定义的时间尽量统一简单,这样可以最大限度减少过滤处理逻辑。

Logstash过滤器由几十个插件组成,详细信息可以查看链接https://www.elastic.co/guide/en/logstash/current/filter-plugins.html。

4.3 输出

发送过滤后的消息,输出可以指定为file, elasticsearch等。

5G小基站日志采集过程中Logstash指定的输出为Elasticsearch,消息会被送往后者处进行存储,并为用户提供搜索功能。

4.4 配置文件说明

输入、过滤规则、输出均可在app-dashboard.conf中进行配置,配置文件说明如下:

input {
  beats {
    port => "5044"
    client_inactivity_timeout => 36000
  }
}

filter {
    if "init_service" in [tags] {
        grok {
            match => {
                "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\] -- \[%{DATA:level}\] -- \[%{NOTSPACE:class}\] -- %{GREEDYDATA:message}"
            }
			overwrite => ["message"]
        }
    }
    else if "init_service_record" in [tags] {
	    grok {
            match => {
                "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\] -- \[%{DATA:level}\] -- \[%{DATA:recordtype}\] -- %{GREEDYDATA:message}"
            }
			overwrite => ["message"]
        }
        json {
            source => "message"
            target => "jsoncontent"
        }
    }
}


output {

    if "init_service" in [tags] {
        elasticsearch {
        hosts => ["10.17.0.8:9200"]
        index => "app_run_access-%{+YYYY.MM.dd}"
     }
    }
	
	if "init_service_record" in [tags] {
        elasticsearch {
        hosts => ["10.17.0.8:9200"]
        index => "app_record_access-%{+YYYY.MM.dd}"
     }
    }
	
  elasticsearch {
    hosts => ["10.17.0.8:9200"]
    index => "app_default_access-%{+YYYY.MM.dd}"
  }
}

注意:

grok插件使用的是正则表达式,具体含义可以参见附录grok-patterns

5、Elasticsearch

Elasticsearch是一个分布式的搜索分析引擎,主要用于检索与分析日志。

Elasticsearch的发展是非常快速的,所以在ES5.0之前,ELK的各个版本都不统一,出现了版本号混乱的状态,所以
从5.0开始,所有Elastic Stack中的项目全部统一版本号。目前使用版本是7.8.0

5.1 基本概念

1)节点(node):一个elasticsearch实例,通过指定集群名可以加入到特定的集群中。

2)集群(cluster):节点的集合。

3)文档(document):数据的基本单元,格式为JSON。

4)索引(index):文档的集合,通过创建不同的索引可以区分不同种类的文档。

5)映射(mapping):决定一个文档(ducument)的组成,比如规定某字段的类型为文本或者数字。映射可以自动生成,但是手动指定可以减轻索引过程的压力,对于不需要进行全文搜索的字段,可以直接指定为keyword类型,这样该字段就不需要进行分词。

6)分片(shard):一个索引内的数据可以分成多个分片存储,集群方式部署时,多个分片会存在不同的主机上。默认情况下一个索引会创建5个分片。

副本(replica):分片的副本。默认情况下每个分片有一个副本。

5.2 节点类型

1)主节点备选节点(master eligible node):在一个集群中,主节点主要做一些轻量级的操作,比如创建和删除索引、管理新节点的加入和分片的分布。而主节点备选节点就是有资格成为主节点的节点,系统会在启动时从主节点备选节点中选举出主节点。如果主机点停止工作了,会从主节点备选节点中重新选举一个主节点。

2)数据节点(data node):数据节点是存储索引分片的节点,主要对文档进行增删改查等操作。数据节点对IO、内存、CPU要求较高。

3)预处理节点(ingest node):进行预处理相关操作的,小集群环境下一般不用。

4)仅协调节点(coordination):主要功能为处理路由请求、处理搜索聚合、分发批量索引请求。小集群环境下一般不用。

6、Kibana

Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。可以用kibana搜索、查看、交互存放在Elasticsearch索引里的数据,使用各种不同的图表、表格、地图等,kibana能够很轻易地展示高级数据分析与可视化。

二、安装

1 Elasticsearch

国内镜像库:https://mirrors.huaweicloud.com/elasticsearch/

注:请确保这台主机剩余足够的磁盘空间,磁盘空间占用如果到85%以上可能会有问题。

1)新建账户elasticsearch,必须使用此用户名

2)配置java环境,要求java8

3)解压安装包

tar -xvf elasticsearch-7.8.0.tar.gz

4)修改系统配置(root权限)

当启动elasticsearch时候遇到nofile、nproc、jvm等报错,需要修改下面系统配置。

echo "elasticsearch - nofile 65536" >> /etc/security/limits.conf
echo "elasticsearch - nproc 4096" >> /etc/security/limits.conf
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -w vm.max_map_count=262144
swapoff -a

5)修改Elasticsearch配置

(1)、config/elasticsearch.yml(文件最下面,修改蓝色部分)

vim config/elasticsearch.yml
network: 10.17.0.8
node.name: 10.17.0.8
discovery.zen.ping.unicast.hosts:
 10.1.62.51 (master节点ip,若只有一个Elasticsearch结点,删除此配置)

network设置ip地址,任意网络均可访问可以设置为0.0.0.0

(2)、config/jvm.options 配置

vim conf/jvm.options
-Xms128m #根据自己机器情况修改
-Xmx128m

-Xms8g 建议为物理内存的1/3到1/2,不超过30G

-Xmx8g 与-Xms保持一致

在Elasticsearch中如果,network.host不是localhost或者127.0.0.1的话,就会认为是生产环境,
会对环境的要求比较高,我们的测试环境不一定能够满足,一般情况下需要修改这2处配

6)启动 (进入elasticsearch-7.8.0目录下)

./bin/elasticsearch -d -p pid (pid文件中记录有进程id,用于关闭elasticsearch)

-d 后台启动

2 kibana

国内镜像库:https://mirrors.huaweicloud.com/kibana/

1)解压安装包

tar -xvf kibana-7.8.0-linux-x86_64.tar.gz

2)后台启动(进入kibana-7.8.0-linux-x86_64目录下)

nohup ./bin/kibana >/dev/null 2>&1 &

3 Logstash

国内镜像库:https://mirrors.huaweicloud.com/logstash/

1)解压安装包

tar -xvf logstash-7.8.0.tar.gz

2)配置文件修改

vim config/app-dashboard.conf

# 输入
input {
  # 在filebeat输入
  beats {
    port => "5044"
    client_inactivity_timeout => 36000
  }
  # 在redis输入
  redis {
        data_type => "list"  #数据类型,一般不需要修改
        key => "filebeat"    #键值,filebeat插入redis时建立的key,默认值为filebeat
        host => "10.17.0.6" #redis服务器 ip
        port => 7001     #redis服务器port
    }
}

#过滤
filter {
    if "init_service_run
  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值