EFK的学习(Elasticsearch + Fluentd+ Kibana)

1. 安装部署参考https://www.qikqiak.com/post/install-efk-stack-on-k8s/

2. Fluentd对应的yaml配置方式,配置文件一般为fluentd-es-configmap.yaml

日志源配置

比如我们这里为了收集 Kubernetes 节点上的所有容器日志,就需要做如下的日志源配置:

<source>

@id fluentd-containers.log

@type tail

path /var/log/containers/*.log

pos_file /var/log/fluentd-containers.log.pos

time_format %Y-%m-%dT%H:%M:%S.%NZ

tag raw.kubernetes.*

format json

read_from_head true

</source>

上面配置部分参数说明如下:

  • id:表示引用该日志源的唯一标识符,该标识可用于进一步过滤和路由结构化日志数据
  • type:Fluentd 内置的指令,tail表示 Fluentd 从上次读取的位置通过 tail 不断获取数据,另外一个是http表示通过一个 GET 请求来收集数据。
  • path:tail类型下的特定参数,告诉 Fluentd 采集/var/log/containers目录下的所有日志,这是 docker 在 Kubernetes 节点上用来存储运行容器 stdout 输出日志数据的目录。
  • pos_file:检查点,如果 Fluentd 程序重新启动了,它将使用此文件中的位置来恢复日志数据收集。
  • tag:用来将日志源与目标或者过滤器匹配的自定义字符串,Fluentd 匹配源/目标标签来路由日志数据。

路由配置

上面是日志源的配置,接下来看看如何将日志数据发送到 Elasticsearch:

<match **>

@id elasticsearch

@type elasticsearch

@log_level info

include_tag_key true

type_name fluentd

host "#{ENV[‘OUTPUT_HOST‘]}"

port "#{ENV[‘OUTPUT_PORT‘]}"

logstash_format true

<buffer>

@type file

path /var/log/fluentd-buffers/kubernetes.system.buffer

flush_mode interval

retry_type exponential_backoff

flush_thread_count 2

flush_interval 5s

retry_forever

retry_max_interval 30

chunk_limit_size "#{ENV[‘OUTPUT_BUFFER_CHUNK_LIMIT‘]}"

queue_limit_length "#{ENV[‘OUTPUT_BUFFER_QUEUE_LIMIT‘]}"

overflow_action block

</buffer>

  • match:标识一个目标标签,后面是一个匹配日志源的正则表达式,我们这里想要捕获所有的日志并将它们发送给 Elasticsearch,所以需要配置成**。
  • id:目标的一个唯一标识符。
  • type:支持的输出插件标识符,我们这里要输出到 Elasticsearch,所以配置成 elasticsearch,这是 Fluentd 的一个内置插件。
  • log_level:指定要捕获的日志级别,我们这里配置成info,表示任何该级别或者该级别以上(INFO、WARNING、ERROR)的日志都将被路由到 Elsasticsearch。
  • host/port:定义 Elasticsearch 的地址,也可以配置认证信息,我们的 Elasticsearch 不需要认证,所以这里直接指定 host 和 port 即可。
  • logstash_format:Elasticsearch 服务对日志数据构建反向索引进行搜索,将 logstash_format 设置为true,Fluentd 将会以 logstash 格式来转发结构化的日志数据。
  • Buffer: Fluentd 允许在目标不可用时进行缓存,比如,如果网络出现故障或者 Elasticsearch 不可用的时候。缓冲区配置也有助于降低磁盘的 IO。

3. Elasticsearch数据存储 

日志数据是存放于 Elasticsearch POD中,但是默认情况下它使用的是emptyDir存储类型,所以当 POD被删除或重新调度时,日志数据也就丢失了。以下讲解使用NFS 服务器手动(静态)创建PV 持久化保存日志数据的例子。

ES数据写入原理

es建索引写入数据,数据最先是存在内存buffer里的,然后再刷入到lucene的底层文件segment中;
写入segment完毕后再执行refresh操作,refresh操作后,数据将commit到磁盘中。
数据刷入到了磁盘,就可以执行查询操作了。

ES数据持久化

如何创建NFS服务器参考:

https://github.com/easzlab/kubeasz/blob/master/docs/guide/nfs-server.md

ES索引操作

具体命令参考:https://blog.csdn.net/hong2511/article/details/81808517

查用的es操作命令(查询时以实际ip为准)

9200作为Http协议端口,用于节点和外部通讯。
9300作为Tcp协议端口,用于节点与节点之间、节点与TCPClient之间的通讯。

常用用_cat API检测集群是否健康。 确保9200端口号可用:curl  localhost:9200/_cat/health?V

获取集群的节点列表:curl  localhost:9200/_cat/nodes?V

列出所有索引:curl localhost:9200/_cat/indices?V

删除索引

curl -XDELETE http://localhost:9200/twitter,my_index

curl -XDELETE http://localhost:9200/*

创建索引

curl -XPUT ‘localhost:9200/customer?pretty‘

往集群索引中插入数据

curl -XPUT ‘localhost:9200/customer/external/1?pretty‘ -d ‘

  {

    "name": "John Doe"

}‘

获取刚刚插入的数据curl -XGET ‘localhost:9200/customer/external/1?pretty‘

更新索引

id为1数据的name字段更新为Jane Doe同时增加字段age为20

curl -XPOST ‘localhost:9200/customer/external/1/_update?pretty‘ -d ‘

  {

   "doc": { "name": "Jane Doe", "age": 20 }

  }‘

索引操作的通用格式

curl -X<REST Verb> <Node>:<Port>/<Index>/<Type>/<ID>

  <REST Verb>:REST风格的语法谓词

  <Node>:节点ip

  <port>:节点端口号,默认9200

  <Index>:索引名

  <Type>:索引类型

  <ID>:操作对象的ID号

$ curl localhost:9200/_cat

=^.^=

/_cat/allocation

/_cat/shards

/_cat/shards/{index}

/_cat/master

/_cat/nodes

/_cat/indices

/_cat/indices/{index}

/_cat/segments

/_cat/segments/{index}

/_cat/count

/_cat/count/{index}

/_cat/recovery

/_cat/recovery/{index}

/_cat/health

/_cat/pending_tasks

/_cat/aliases

/_cat/aliases/{alias}

/_cat/thread_pool

/_cat/plugins

/_cat/fielddata

/_cat/fielddata/{fields}

/_cat/nodeattrs

/_cat/repositories

/_cat/snapshots/{repository}

原文地址:https://www.cnblogs.com/niewx5201314/p/11663115.html

时间: 2024-10-10 16:24:38

EFK的学习(Elasticsearch + Fluentd+ Kibana)的相关文章

elk/elasticsearch+fluentd+kibana

分布式日志收集系统 日志收集系统采用elasticsearch+fluentd+kibana,用fluentd代替elk社区里的logstash,logstas的插件是最多的,同时logstash的性能和资源消耗太高,经某站大佬压力测试,在环境为2核4g的云计算服务器上,logstash写入qps极限为8000,通过结合易瑞现有询报价系统,同时也是用户3000+的项目产品,logstash负载压力显然承受不住,服务器资源消耗太严重,所以基于以上考虑采用新型日志收集产品fluentd来代替logs

基于Elasticsearch+Fluentd+Kibana的日志收集分析系统

我们平时分析log直接在日志文件中 grep.awk 就可以获得自己想要的信息,此方法效率低下,生产中需要集中化的日志管理,所有服务器上的日志收集汇总 Elasticsearch一个节点(node)就是一个Elasticsearch实例,一个集群(cluster)由一个或多个节点组成,它们具有相同的cluster.name,它们协同工作,分享数据和负载.当加入新的节点或者删除一个节点时,集群就会感知到并平衡数据.集群中一个节点会被选举为主节点(master),它将临时管理集群级别的一些变更,例如

【好文】ElasticSearch 5学习——安装Elasticsearch、Kibana和X-Pack

安装准备: 安装Elasticsearch唯一的要求是安装官方新版的Java,包括对应的Jdk. 安装Elasticsearch 首先到官网下载最新版本的Elasticsearch压缩包. 可以使用命令,注意将最新的可用的下载链接填入: curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.0.2.zip unzip elasticsearch-5.0.2.zip cd elasticsea

Nlog、elasticsearch、Kibana以及logstash

Nlog.elasticsearch.Kibana以及logstash 前言 最近在做文档管理中,需要记录每个管理员以及用户在使用过程中的所有操作记录,本来是通过EF直接将操作数据记录在数据库中,在查询的时候直接从数据库中读取,但是这样太蠢了,于是在网上找到了logstash这NB的工具,和大家分享一下学习的过程. 环境准备 需要在官网(https://www.elastic.co/)上下载这三个工具,我下载的版本是elasticsearch-2.3.4,kibana-4.5.2-windows

td-agent和elasticsearch、kibana搭建日志平台

系统版本:centos 6.4 x86.64 网络环境:我这台机器处于内网,连不了外网,所以要通过代理上 服务端:elasticsearch和kibana.Fluentd Aggregator安装在一台机器上 IP为192.168.1.5 客户端:192.168.1.6 Mysql Server 192.168.1.7:tomcat Server 架构图: 注意:1.2.3步服务端和客户端都要安装 1.首先安装ruby 首先把系统自带的ruby删除啦,系统自带ruby版本太低 安装依赖软件 yu

使用 ElasticSearch + LogStash + Kibana 来可视化网络流量

简介 ELK 套装包括 ElasticSearch.LogStash 和 Kibana. 其中,ElasticSearch 是一个数据搜索引擎(基于 Apache Lucene)+分布式 NoSQL 数据库:LogStash 是一个消息采集转换器,类似 Syslog,可以接收包括日志消息在内的多种数据格式,然后进行格式转换,发送给后端继续处理:Kibana 是一个 Web 前段,带有强大的数据分析.整理和可视化功能. 是不是听起来就觉得十分强大! 一般情况下,ELK 套装的工作流程为 原始数据

Elasticsearch,Filebeat,Kibana部署,添加图表及elastalert报警

服务端安装 Elasticsearch和Kibana(需要安装openjdk1.8以上) 安装方法:https://www.elastic.co以Ubuntu为例: wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - sudo apt-get install apt-transport-https echo "deb https://artifacts.elastic.co/pack

ELK系列(1) - Elasticsearch + Logstash + Kibana + Log4j2快速入门与搭建用例

前言 最近公司分了个ELK相关的任务给我,在一边学习一边工作之余,总结下这些天来的学习历程和踩坑记录. 首先介绍下使用ELK的项目背景:在项目的数据库里有个表用来存储消息队列的消费日志,这些日志用于开发者日后的维护.每当客户端生产一条消息并发送到消息队列后,就会插入一条对应的记录到数据库里.当这条消息被消费之后,又会更新数据库里对应的记录的几个column的值,比如status.updated_on这些常用的column. 由于客户每天生产消费的消息很多,导致数据库里的这个表里的数据很多,长年累

EFK教程(4) - ElasticSearch集群TLS加密通讯

基于TLS实现ElasticSearch集群加密通讯 作者:"发颠的小狼",欢迎转载 目录 ? 用途? ES节点信息? Step1. 关闭服务? Step2. 创建CA证书? Step3. 创建CERT证书? Step4. 创建密钥库? Step5. 删除CA证书? Step6. 修改elasticsearch.yml配置? Step7. 启动服务? 附. 参考文档 用途 前情提要: ? 在第一篇<EFK教程 - 快速入门指南>中,阐述了EFK的安装部署,其中Elastic