当前位置: 首页 > news >正文

宜兴做网站的联系方式网络营销的三大核心

宜兴做网站的联系方式,网络营销的三大核心,北京手机网站设计公司,服装网站案例文章目录 按照服务名区分索引名1.修改fluent-operator,让其支持logstash_prefix_key2.让它能获取app name作为服务名3. 拼接索引名4. 应用变更 发自个人博客: https://uublog.com/article/20230510/kubernetes-fluent-operator-dynamic-index-name/ 日志…

文章目录

    • 按照服务名区分索引名
      • 1.修改fluent-operator,让其支持logstash_prefix_key
      • 2.让它能获取app name作为服务名
      • 3. 拼接索引名
      • 4. 应用变更

发自个人博客: https://uublog.com/article/20230510/kubernetes-fluent-operator-dynamic-index-name/

日志收集,考虑到我们没有主动上报日志,格式也不太统一,容器化的时候,对于我们而言采集容器标准输出的日志是更快捷达到目的的方式。

大致对比了filebeat、fluentd、fluentbit、vector、logstash后,锁定了flientbit。

虽然它功能不是最强大的,但是基本功能能满足我们的业务需求,采集输入端多样化,也能做简单的filter,支持output的端也很丰富。其次,它吃资源比较少,性能也不错。

我们只需要它收集标准输出的日志,输出到es即可。

而在k8s中,有kubesphere共献给fluent的fluent-operator。该opeator提供了fluentbit only、fluentd only、fluentbit+fluentd 这几种采集方式。对于我们而言,就fluentbit 就够了。

我选择了helm方式安装,下载了它chart (https://github.com/fluent/fluent-operator/releases/download/v2.2.0/fluent-operator.tgz)包,解压到/app/fluent-operator/ ,直接修改里面values.yaml,这样好方便未来管理自己的部署配置。

简单按照文档,修改了fluentbit的input和output后,直接安装即可

helm upgrade --install fluent-operator --create-namespace -n fluent /app/fluent-operator/ --set containerRuntime=containerd

按照服务名区分索引名

日志是能收集了,但是所有的服务的日志,当天都放到一个索引,类似 “k8s-logs-<yyyy.mm.dd>” 这样的索引中。本地还好,如果生产环境的话,那一天单个索引就十分庞大了。而且对于不同服务日志保留天数做差异化保留的时候也不好处理,也不好直观展示各个服务日志大小。

所以能按照k8s-<service-name>-<yyyy.mm.dd>格式的话,对我们会更为理想点。截止目前的版本,没有现成的配置可以实现这个。经过研究,可以利用fluentbit的 logstash_prefix_key 这个来实现。logstash_prefix是固定的前缀,logstash_prefix_key则可以动态读取 key来作为索引名。

1.修改fluent-operator,让其支持logstash_prefix_key

经过测试,fluent-operator当前版本的模板并没有对该字段进行处理,所以要进行修改让它支持这个字段。

我需要output到es,所以我就修改了es相关的output,其它输出源的可以自己检查下。

修改 ./templates/fluentbit-output-elasticsearch.yaml

在Values.fluentbit.output.es.logstashPrefix之后增加 .Values.fluentbit.output.es.logstashPrefixKey 这段的配置,如下:

{{- if .Values.fluentbit.output.es.logstashPrefix }}logstashPrefix: {{ .Values.fluentbit.output.es.logstashPrefix | default "ks-logstash-log" | quote }}
{{- end }}
{{- if .Values.fluentbit.output.es.logstashPrefixKey }}logstashPrefixKey: {{ .Values.fluentbit.output.es.logstashPrefixKey | default "ks-logstash-log-key" | quote }}
{{- end }}

2.让它能获取app name作为服务名

./values.yaml 修改fluentbit部分,开启kubernetes labels,因为labels的app标签就是我们的服务名。

filter:kubernetes:enable: truelabels: true

3. 拼接索引名

由于logstash_prefix_key只能接受 key,且不支持嵌套的对象的key。

举个直观的例子,假设你的对象是这样的:

{"file": "systemd.log","kubernetes": {"labels": {"app": "demo-service"}}
}

k8s-$kubernets["labels"]["app"] 和 像 $kubernets["labels"]["app"] 这样的值,是取不到任何内容的。像上面的例子,只接受 $file 这个值。

所以这里要实现我们的目标,我们得自己拼接出一个新的key,作为索引名。类似下面:

{"file": "systemd.log","app_name": "k8s-demo-service","kubernetes": {"labels": {"app": "demo-service"}}
}

我是这样实现的,利用lua的filter,通过取出kubernetes的labels,拼接新的值。

我修改的是 cat ./templates/fluentbit-containerd-config.yaml 增加了一个 add_k8s_app_name_field 函数

{{- if .Values.Kubernetes -}}
{{- if .Values.fluentbit.enable -}}
{{- if .Values.fluentbit.filter.containerd.enable -}}
apiVersion: v1
kind: ConfigMap
metadata:name: fluent-bit-containerd-config
data:containerd.lua: |function containerd( tag, timestamp, record)if(record["logtag"]~=nil)thentimeStr = os.date("!*t",  timestamp["sec"])t = string.format("%4d-%02d-%02dT%02d:%02d:%02d.%sZ",timeStr["year"], timeStr["month"], timeStr["day"],timeStr["hour"], timeStr["min"], timeStr["sec"],timestamp["nsec"]);record["time"] = t;record["log"] = record["message"];record["message"] =  nil;return 1, timestamp, recordelsereturn 0,timestamp,recordendendfunction add_k8s_app_name_field(tag, timestamp, record)retcode = 0prefix = 'k8s' app_name = record['kubernetes']['labels']['app']if  app_name ~= nil thenapp_name = prefix .. '-' .. app_nameif app_name ~= nil thenrecord['app_name'] = app_nameretcode = 2endendreturn retcode, timestamp, recordend
{{- end }}
{{- end }}
{{- end }}

修改 templates/fluentbit-clusterfilter-kubernetes.yaml 增加新增的lua filter函数 对kubernetes标签进行处理

cat templates/fluentbit-clusterfilter-kubernetes.yaml

{{- if .Values.Kubernetes -}}
{{- if .Values.fluentbit.enable -}}
{{- if .Values.fluentbit.filter.kubernetes.enable -}}
apiVersion: fluentbit.fluent.io/v1alpha2
kind: ClusterFilter
metadata:name: kuberneteslabels:fluentbit.fluent.io/enabled: "true"fluentbit.fluent.io/component: logging
spec:match: kube.*filters:- kubernetes:kubeURL: https://kubernetes.default.svc:443kubeCAFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crtkubeTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token{{- $params := omit .Values.fluentbit.filter.kubernetes "enable" }}{{- if .Values.fluentbit.output.stdout.enable }}{{- $_ := set $params "k8sLoggingExclude" true -}}{{- end }}{{- with $params }}{{- . | toYaml | nindent 6 }}{{- end }}- lua:script:key: containerd.luaname: fluent-bit-containerd-configcall: add_k8s_app_name_fieldtimeAsTable: true- nest:operation: liftnestedUnder: kubernetesaddPrefix: kubernetes_- modify:rules:- remove: stream- remove: kubernetes_pod_id- remove: kubernetes_docker_id- remove: kubernetes_container_hash- remove: kubernetes_labels- nest:operation: nestwildcard:- kubernetes_*nestUnder: kubernetesremovePrefix: kubernetes_
{{- end }}
{{- end }}
{{- end }}

主要增加了

- lua:script:key: containerd.luaname: fluent-bit-containerd-configcall: add_k8s_app_name_fieldtimeAsTable: true

到这里基本就满足所有的条件了,为了不影响systemd的日志收集和归类,也给它的lua filter增加app_name字段.

./templates/fluentbit-lua-config.yaml

new_record["app_name"] = "systemd"

经过前面的修改后,只要在values.yaml 设置 fluentbit.output.es.logstashPrefixKey=”$app_name” 即可

4. 应用变更

我修改过的values.yaml,去除了无关部分后主要如下:

Kubernetes: true
fluentbit:crdsEnable: trueenable: trueimage:repository: "hub.xxxx.com/library/fluent-bit"tag: "v2.0.11"input:tail:enable: truerefreshIntervalSeconds: 10memBufLimit: 50MBpath: "/var/log/containers/*.log"skipLongLines: falsesystemd:enable: truepath: "/var/log/journal"includeKubelet: trueoutput:es:enable: true# 如果多个host的话,用hostshost: "es.xxx.local"port: 9200logstashFormat: truelogstashPrefixKey: "$app_name"filter:kubernetes:enable: truelabels: trueannotations: falsek8sLoggingExclude: truecontainerd:enable: truesystemd:enable: true

再来helm更新一下,搞定

helm upgrade --install fluent-operator --create-namespace -n fluent /app/fluent-operator/ --set containerRuntime=containerd

效果如下:

yellow open k8s-kiali-2023.05.10                iWEHK0gKR6GoPKjO3gH6Eg 1 1      30      0 105.9kb 105.9kb
yellow open k8s-nginx-deploy-2023.05.10         OCzPIKWgRneSn27J-o4k9g 1 1      16      0  76.3kb  76.3kb
yellow open k8s-istiod-2023.05.10               GlA1dI7aQDqPFD-5ZMX6iw 1 1     797      0 329.5kb 329.5kb
yellow open k8s-reviews-2023.05.10              41Ifiq3cTQGBKdJ4Fn2MJQ 1 1      18      0  86.6kb  86.6kb
http://www.shuangfujiaoyu.com/news/61769.html

相关文章:

  • 淮南网站建设公司网络推广的优势
  • 深圳外贸英文网站设计公司哪家好适合奖励自己的网站免费
  • 网站建设设计百度推广代理公司
  • 滨州做企业网站网络营销推广公司
  • 有服务器和网站代码了 怎么建站怎么把产品放到网上销售
  • 陕西省交通建设集团公司门户网站武汉网站制作
  • 网络服务提供者对在业务活动中收集的公民个人电子信息青岛关键词推广seo
  • 做网站需要多少资金贵阳seo网站推广
  • 和城乡建设部网站河北高端网站建设
  • 建一个个人网站营销策划品牌策划
  • 设计一个网站页面需要多少钱全国疫情地区查询最新
  • 网站建设氵金手指下拉十二网络推广seo怎么做
  • 木樨园网站建设公司湖南seo推广软件
  • 杭州网站开发外包公司搜狗网页搜索
  • 淮安高端网站制作企业网站的域名是该企业的
  • 电影网站嵌入广告怎么做Java站长之家站长工具综合查询
  • 小程序 网站 开发googleplay
  • 食品网站开发毕业设计全网搜索关键词查询
  • 网站开发工具有哪些百度seo搜索引擎优化培训
  • 怀化建设局网站百度云电脑版网站入口
  • 高端h5网站开发如何给网站做推广
  • wordpress批量定时发布seo搜索引擎优化薪酬
  • 京东的网站建设规划产品运营方案
  • 做海外贸易网站关键词优化是什么
  • 如何查看网站域名证书推广网站推广
  • 在线设计工具的网站怎么做百度直接打开
  • 武汉网站开发whaa广告投放是做什么的
  • 网站数据泄露我们应该怎么做友情链接查询工具
  • 东莞网站建设效果好流量购买网站
  • wordpress自定义结构后空白页湖南seo推广