行业解决方案:云原生系列5 容器化日志之EFK

优采云 发布时间: 2022-10-25 01:22

  行业解决方案:云原生系列5 容器化日志之EFK

  上图是EFK架构图,k8s环境下常用的log采集方法。

  日志要求

  1 采集采集微服务的日志,可以根据请求id跟踪完整的日志;

  2.统计请求接口的耗时。如果最大响应时间超过最大响应时间,应报警并进行针对性调优;

  3 慢sql排行榜和报警;

  4 异常日志排名列表,并报警;

  5 页面请求排名慢并报警;

  k8s 日志采集

  k8s本身不会为你登​​录采集,需要你自己做;

  k8s的容器日志处理方式中使用的集群级日志,

  即容器销毁、pod漂移、Node宕机等都不会影响容器日志;

  容器的日志会输出到stdout、stderr,对应的存储在宿主机的目录下。

  即/var/lib/docker/container;

  通过 Node 上的日志代理转发

  在每个节点上部署一个守护进程,运行一个日志代理来采集日志,

  比如fluentd,采集在主机对应的数据盘上进行日志,然后输出到日志存储服务或者消息队列;

  优缺点分析:

  优点 1 每个 Node 只需要部署一个 Pod采集 日志 2 不会侵入应用程序 缺点 应用程序输出的日志必须直接输出到容器的 stdout 和 stderr

  Pod内部通过sidecar容器转发到日志服务

  通过在pod中启动一个sidecar容器,比如fluentd,读取容器挂载的volume目录,输出到日志服务器;

  日志输入源:日志文件

  日志处理: logging-agent ,如 fluentd

  日志存储:如elasticSearch、kafka

  优缺点分析:

  优点 1、部署简单;2、对主人友善;缺点 1、消耗资源较多;2.通过kubectl日志看不到日志

  例子:

  apiVersion: v1

kind: Pod

metadata:

name: counter

spec:

containers:

- name: count

image: busybox

args:

- /bin/sh

- -c

- >

i=0;

while true;

do

echo "$i:$(data)" >> /var/log/1.log

echo "$(data) INFO $i" >> /var/log/2.log

i=$((i+1))

sleep 1;

done

volumeMounts:

- name: varlog

mountPath: /var/log

- name: count-agent

image: k8s.gcr.io/fluentd-gcp:1.30

env:

- name: FLUENTD_ARGS

value: -c /etc/fluentd-config/fluentd.conf

valumeMounts:

- name: varlog

mountPath: /var/log

- name: config-volume

mountPath: /etc/fluentd-config

volumes:

- name: varlog

emptyDir: {}

- name: config-volume

configMap:

name: fluentd-config

  Pod 内部通过 sidecar 容器输出到 stdout

  适用于应用容器只能输出日志到文件,不能输出到stdout和stderr的场景;

  通过一个sidecar容器,直接读取日志文件,然后重新输出到stdout、stderr、

  可以在Node上使用日志代理转发的模式;

  优缺点分析:

  对比显示,优势只需要消耗更少的CPU和内存,共享卷处理效率比较高。缺点 主机上有两条完全相同的日志,磁盘利用率不高。

  应用容器直接输出日志到日志服务

  适用于日志系统成熟的场景,日志不需要经过k8s;

  EFK 引入 fluentd

  fluentd 是一个用于统一日志记录层的开源数据采集器

  flentd 允许您统一日志采集和更好地使用和理解数据;

  四大特点:

  统一日志层

  fluentd 隔离数据源,提供与后台系统统一的日志层;

  简单灵活

  提供500多个插件,连接大量数据源和输出源,内核简单;

  广泛的验证

  自 Fluentd 以来,5000 多家数据驱动型公司

  

  最大的客户端通过它从 50,000 多台服务器采集日志

  **云原生**

  是云原生CNCF的成员项目

  4大优势:

  统一的 JSON 日志

  Fluentd 尝试使用 JSON 结构化数据,统一了处理日志数据、采集、过滤、缓存、输出日志到多个目的地的各个方面,使用 JSON 进行下游数据处理更简单,因为它已经有足够的访问结构并保留了足够灵活的场景;

  插件架构

  fluntd 有一个灵活的插件系统,允许社区扩展其功能。超过 500 个社区贡献的插件连接了许多数据源和目的地;通过插件,您可以开始更好地利用您的日志

  最低资源消耗

  用c和ruby写的,对系统资源要求很低,40M左右的内存可以处理13k/次/秒,如果需要更紧凑的内存,可以使用Fluent bit,更轻的Fluentd

  内核可靠

  Fluentd 支持内存和基于文件的缓存,防止内部节点数据丢失;

  还支持鲁棒故障并可以配置高可用模式,超过 2000 家数据驱动的公司在不同的产品中依靠 Fluentd 更好地使用和理解他们的日志数据

  使用流利的理由:

  简单灵活

  10分钟即可在电脑上安装fluentd,立即下载,超过500个插件连接数据源和目的地,插件也易于开发和部署;

  开源

  基于Apache2.0证书完全开源

  可靠和高性能

  超过 5,000 家数据驱动型公司的不同产品和服务依靠 fluentd 更好地使用和理解数据。事实上,根据datadog的调查,使用docker运行的技术排在前7位;

  一些流利的用户拥有来自数千台机器的实时 采集 数据。每个实例只需要大约 40M 的内存。缩放时,可以节省大量内存。

  社区

  fluentd 可以改进软件并帮助其他人更好地使用它

  大公司使用代言:微软、亚马逊;pptv;

  可以与elasticSearch + kibana结合,组成日志套件;

  快速搭建EFK集群,采集应用日志,配置性能排名;

  弹性搜索

  Elasticsearch 是一个分布式的 RESTful 搜索和数据分析引擎。

  能够解决正在出现的各种用例。作为 Elastic Stack 的核心,

  它集中存储您的数据,并帮助您发现预期和意外。

  详细介绍:

  木花

  Kibana 是一个开源数据分析和可视化平台,是 Elastic Stack 的成员。

  旨在与 Elasticsearch 配合使用。您可以使用 Kibana 在 Elasticsearch 索引中搜索数据,

  查看和互操作。您可以使用图表、表格和地图轻松分析和呈现数据。

  [英文]

  查看和互操作。您可以轻松地使用图表、表格和地图来分析和呈现数据。

  Kibana 使大数据易于理解。这很简单,

  基于浏览器的界面允许您快速创建和共享动态数据仪表板,以跟踪 Elasticsearch 中的实时数据变化。

  详细介绍:

  容器化 EFK 实现路径

  直接往下拖代码,然后配置上下文、命名空间,就可以安装了;

  cd elk-kubernetes

./deploy.sh --watch

  下面是deploy.sh的脚本,可以简单看一下:

  #!/bin/sh

CDIR=$(cd dirname "$0" && pwd)

cd "$CDIR"

print_red() {

printf '%b' "\033[91m$1\033[0m\n"

}

print_green() {

printf '%b' "\033[92m$1\033[0m\n"

}

render_template() {

eval "echo \"$(cat "$1")\""

}

KUBECTL_PARAMS="--context=250091890580014312-cc3174dcd4fc14cf781b6fc422120ebd8"

NAMESPACE=${NAMESPACE:-sm}

KUBECTL="kubectl ${KUBECTL_PARAMS} --namespace=\"${NAMESPACE}\""

eval "kubectl ${KUBECTL_PARAMS} create namespace \"${NAMESPACE}\""

#NODES=$(eval "${KUBECTL} get nodes -l 'kubernetes.io/role!=master' -o go-template=\"{{range .items}}{{\\\$name := .metadata.name}}{{\\\$unschedulable := .spec.unschedulable}}{{range .status.conditions}}{{if eq .reason \\\"KubeletReady\\\"}}{{if eq .status \\\"True\\\"}}{{if not \\\$unschedulable}}{{\\\$name}}{{\\\"\\\\n\\\"}}{{end}}{{end}}{{end}}{{end}}{{end}}\"")

NODES=$(eval "${KUBECTL} get nodes -l 'sm.efk=data' -o go-template=\"{{range .items}}{{\\\$name := .metadata.name}}{{\\\$unschedulable := .spec.unschedulable}}{{range .status.conditions}}{{if eq .reason \\\"KubeletReady\\\"}}{{if eq .status \\\"True\\\"}}{{if not \\\$unschedulable}}{{\\\$name}}{{\\\"\\\\n\\\"}}{{end}}{{end}}{{end}}{{end}}{{end}}\"")

ES_DATA_REPLICAS=$(echo "$NODES" | wc -l)

if [ "$ES_DATA_REPLICAS" -lt 3 ]; then

print_red "Minimum amount of Elasticsearch data nodes is 3 (in case when you have 1 replica shard), you have ${ES_DATA_REPLICAS} worker nodes"

print_red "Won't deploy more than one Elasticsearch data pod per node exiting..."

exit 1

fi

print_green "Labeling nodes which will serve Elasticsearch data pods"

for node in $NODES; do

eval "${KUBECTL} label node ${node} elasticsearch.data=true --overwrite"

<p>

done

for yaml in *.yaml.tmpl; do

render_template "${yaml}" | eval "${KUBECTL} create -f -"

done

for yaml in *.yaml; do

eval "${KUBECTL} create -f \"${yaml}\""

done

eval "${KUBECTL} create configmap es-config --from-file=es-config --dry-run -o yaml" | eval "${KUBECTL} apply -f -"

eval "${KUBECTL} create configmap fluentd-config --from-file=docker/fluentd/td-agent.conf --dry-run -o yaml" | eval "${KUBECTL} apply -f -"

eval "${KUBECTL} create configmap kibana-config --from-file=kibana.yml --dry-run -o yaml" | eval "${KUBECTL} apply -f -"

eval "${KUBECTL} get pods $@"

</p>

  简单分解部署流程:

  我的k8s环境还没有搭建成功,后续搭建成功后会给出详细的安装说明。

  概括

  一句话总结这篇文章:EFK是通过日志代理客户端采集应用日志的常用实现方式。

  原创不易,关注有诚意,转发价格更高!转载请注明出处,让我们互相交流,共同进步。欢迎交流。

  原来的:

  作者:李富春

  标题:Cloud Native Series 5 EFK for Containerized Logs

  相关阅读标题:《免费开源》基于Vue和Quasar的前端SPA项目:crudapi后台管理系统EXCEL数据导入(九)基于Vue和Quasar的前端SPA项目数据导入(九)回顾

  通过上一篇文章基于Vue和Quasar的前端SPA项目中业务数据的介绍(7),实现了业务数据的基本crud功能。本文主要介绍批量导入业务数据的相关内容。

  介绍

  当数据量比较大时,手动录入数据会比较慢,所以采用批量导入的方式录入数据,提高效率。这里使用的文件格式是 EXCEL。每个业务表都可以自动生成一个EXCEL模板文件。模板下载后直接编辑EXCEL表格,然后上传EXCEL文件批量导入数据。

  用户界面界面

  产品介绍

  API

  业务数据导入相关API,包括获取模板和导入两个功能,可以通过swagger文档查看。通过axios封装api,名称为table

  import { axiosInstance } from "boot/axios";

const table = {

import: async function(tableName, data, progressCallback) {

return axiosInstance.post("/api/business/" + tableName + "/import", data,

{

headers: HEADERS,

onUploadProgress: (progressEvent) => {

if (progressCallback) {

progressCallback(progressEvent)

}

}

});

},

getImportTemplate: function(tableName) {

return axiosInstance.get("/api/business/" + tableName + "/import/template",

{

params: {

}

}

);

}

};

export { table };

  核心代码代码结构

  代码结构

  QFile 组件

  q-file 组件用于上传EXCEL。

  产品示例

  下载模板,主要字段包括名称、品牌、颜色、价格、数量等,然后编辑EXCEL。

  导入后查看,发现3条数据导入成功。

  概括

  主要介绍批量导入业务数据的功能。不同业务表单可自动生成模板文件,通过配置实现零代码批量导入业务数据功能。稍后将介绍一些高级功能。

  [英文]

  本文主要介绍业务数据批量导入功能,不同业务表单可自动生成模板文件,通过配置零代码实现业务数据批量导入功能。稍后将介绍一些高级功能。

  演示

  官网地址:

  测试地址:

  附上源地址 GitHub地址

  吉特地址

  由于网络原因,GitHub可能会比较慢,可以改成访问Gitee,代码会同步更新。

  原来的:

  添加一名作者

  题目:《免费开源》基于Vue和Quasar前端SPA项目crudapi后台管理系统EXCEL数据导入(九)

  解决方法:关关采集器辅助(自动解决网站断更错更)软件使用说明

  经过近一年的开发,第三版关冠辅助软件首次开启公测。屏幕截图中描述了配置方法和使用说明。

  注意,本页主要介绍api的配置。如果使用本软件直接连接数据库,在此处进入(新手推荐使用直连数据库模式),点击进入...

  主要的意思:

  ①:自动解决网站中断。

  ②:自动解决重复内容采集,导致更新失败。

  ③:处理内容为空或内容缺失并自动补充内容的系列问题。

  第一步:配置方法

  1.下载软件

  ①:首先下载关冠辅助软件,(软件运行环境,.net4.x)

  下载地址(如果打不开,请复制到浏览器)::99/ggsoft/intesoft.rar

  ②:api接口下载:Jackie接口(gbk)

  2.打开软件运行

  下载软件后,会得到一个exe可执行软件,如图,双击或右键运行

  3.账号登录

  本软件需要账号登录。目前可以使用免费的公测账号登录(账号和密码都是:),如图:

  4.系统配置,这一步需要注意,出错会导致运行失败

  

  点击系统设置

  点击系统设置,需要输入密码,默认密码为空,直接确认即可,如果提示错误,忽略,直接进入系统相关配置

  注:当前版本仅支持远程模式,数据库模式将在后续开发

  5.下载连接远程接口的api,下载地址(第一步下载的api接口):

  6.开始配置远程接口对接,如图配置。

  比如我的域名是:,插件新建文件夹的名称是inteapi,如图。

  要生成配置,您可以在此处选择 opf。其他无效。相关功能将在稍后启用。如果你对系统做过二次开发,取消了opf索引文件,这里不要选择。

  配置完成后,点击【系统设置】右下角的【确定】保存。

  注意:系统设置受密码保护。如果下次需要修改此页面,请输入密码,即系统设置中设置的密码。如果忘记密码,则需要全部重新配置

  以上设置完成后,api接口设置完成。

  第二步:导入 Guanguan采集器 规则

  打开 Guan采集器 根目录下的 Rules 文件夹,里面收录了 Guan采集器 的所有 采集 规则(.xml 格式)

  将Rule文件夹直接复制到官官辅助的根目录下

  第三步:如何使用(注意设置是实时生效的,即在采集过程中设置立即生效)

  1、点击左上角【采集(维护)】,选择【手动更新(维护)】,目前只有一个选项

  

  2、采集器修复页面说明,如图:

  采集模式选择(自动修复模式)

  1.【单份加载】模式

  单模式加载有两种选择

  ①:指定ID 示例:1、2、3、4、5、6等,中间用逗号“,”隔开,如图:

  ②:ID段:比如要从对方的第1000个开始到对方的第2000个,如图输入1000-2000:

  2.批量加载:

  注意:本软件支持自增变量id。如果对方没有多页,这里的设置无效。例如,抓取设置对首页无效。

  单击导入后,软件开始运行。如果修复成功且不显示自动跳过不修复,则显示的都是自动修复失败,需要人工协助修复。

  手动模式说明:

  其他功能的使用方法与关关的手动模式采集器类似,替换模式略有不同,强调手动替换模式的使用,如图:

  其他功能基本一目了然,不多解释

  注意:手动修复时,由于远程获取数据会有一定的延迟(相对于关关采集器会慢一些),必须等数据完全正常后再进行下一步操作,否则可能会出现错误,后续的数据库模式可以避免这个问题

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线