基于Filebeat自动收集Kubernetes日志的分析系统

合集下载

kubernetes常见日志采集问题和解决方案分析

kubernetes常见日志采集问题和解决方案分析

kubernetes常见⽇志采集问题和解决⽅案分析传统⽇志与kubernetes⽇志对⽐传统服务1. ⽬录固定2. 重启不会丢失3. 不⽤关注标准与错误⽇志输出容器服务1. 节点不固定2. 重启服务会漂移3. 需要关注标准与错误⽇志输出4. ⽇志⽂件重启会丢失5. ⽇志⽬录不固定常见⽇志采集⽅案:1.远程⽇志将容器中⽇志直接写⼊远程kafka、es等,再由logstash等处理。

劣势就是需要改造服务由写⼊本地的就要进⾏修改传输到远端存储。

2.sidecar模式,在每个pod中运⾏⼀个filebeat,logstash等pod共享⼀个valume,由采集⼯具将⽇志内容采集发送。

缺点每个pod都需要额外增加⼀个⽇志采集⼯具,对pod有侵⼊。

3.logagent模式,在node中运⾏⼀个filebeat,logstash等,通过将pod⽇志⽬录固定事先约定好,直接采集对应⽬录内容传输⾄远端。

优点节约资源,对pod⽆侵⼊。

缺点:⽂件后缀名尽量统⼀否则维护较为困难。

⽬录预先定义好⽆法判断来源于哪个pod,只能区分node。

实践:⽇志采集⼯具使⽤阿⾥开源logpilot(优点与docker主进程进⾏交互能够通过docker动态识别各个pod⽇志⽬录,底层采⽤filebeat)搭建es:---apiVersion: v1kind: Servicemetadata:name: elasticsearch-api namespace: kube-systemlabels:name: elasticsearchspec:selector:app: esports:- name: transportport: 9200protocol: TCP---apiVersion: v1kind: Servicemetadata:name: elasticsearch-discovery namespace: kube-systemlabels:name: elasticsearchspec:selector:app: esports:- name: transportport: 9300protocol: TCP---apiVersion: apps/v1beta1kind: StatefulSetmetadata:name: elasticsearchnamespace: kube-systemlabels:kubernetes.io/cluster-service: "true" spec:replicas: 3serviceName: "elasticsearch-service"selector:matchLabels:app: estemplate:metadata:labels:app: esspec:tolerations:- effect: NoSchedulekey: node-role.kubernetes.io/master serviceAccountName: dashboard-admin initContainers:- name: init-sysctlimage: busybox:1.27command:- sysctl- -w- vm.max_map_count=262144securityContext:privileged: truecontainers:image: /imooc/elasticsearch:5.5.1 ports:- containerPort: 9200protocol: TCP- containerPort: 9300protocol: TCPsecurityContext:capabilities:add:- IPC_LOCK- SYS_RESOURCEresources:limits:memory: 4000Mirequests:cpu: 100mmemory: 2000Mienv:- name: "http.host"value: "0.0.0.0"- name: "network.host"value: "_eth0_"- name: ""value: "docker-cluster"- name: "bootstrap.memory_lock"value: "false"- name: "discovery.zen.ping.unicast.hosts"value: "elasticsearch-discovery"- name: "discovery.zen.ping.unicast.hosts.resolve_timeout"value: "10s"- name: "discovery.zen.ping_timeout"value: "6s"- name: "discovery.zen.minimum_master_nodes"value: "2"- name: "discovery.zen.fd.ping_interval"value: "2s"- name: "discovery.zen.no_master_block"value: "write"- name: "gateway.expected_nodes"value: "2"- name: "gateway.expected_master_nodes"value: "1"- name: "transport.tcp.connect_timeout"value: "60s"- name: "ES_JAVA_OPTS"value: "-Xms2g -Xmx2g"livenessProbe:tcpSocket:port: transportinitialDelaySeconds: 20periodSeconds: 10volumeMounts:- name: es-datamountPath: /dataterminationGracePeriodSeconds: 30volumes:- name: es-datahostPath:path: /es-dataes.yaml搭建logpilot:---apiVersion: extensions/v1beta1kind: DaemonSetmetadata:name: log-pilotnamespace: kube-systemlabels:k8s-app: log-pilotkubernetes.io/cluster-service: "true"spec:template:metadata:labels:k8s-app: log-eskubernetes.io/cluster-service: "true"version: v1.22spec:tolerations:- key: node-role.kubernetes.io/mastereffect: NoScheduleserviceAccountName: dashboard-admincontainers:- name: log-pilotimage: /imooc/log-pilot:0.9-filebeat resources:limits:memory: 200Mirequests:cpu: 100mmemory: 200Mienv:- name: "FILEBEAT_OUTPUT"value: "elasticsearch"- name: "ELASTICSEARCH_HOST"value: "elasticsearch-api"- name: "ELASTICSEARCH_PORT"value: "9200"- name: "ELASTICSEARCH_USER"value: "elastic"- name: "ELASTICSEARCH_PASSWORD"value: "changeme"volumeMounts:- name: sockmountPath: /var/run/docker.sock- name: rootmountPath: /hostreadOnly: true- name: varlibmountPath: /var/lib/filebeatmountPath: /var/log/filebeatsecurityContext:capabilities:add:- SYS_ADMINterminationGracePeriodSeconds: 30volumes:- name: sockhostPath:path: /var/run/docker.sock- name: roothostPath:path: /- name: varlibhostPath:path: /var/lib/filebeattype: DirectoryOrCreate- name: varloghostPath:path: /var/log/filebeattype: DirectoryOrCreatelogpilot.yaml搭建kibana:---apiVersion: v1kind: Servicemetadata:name: kibananamespace: kube-systemlabels:component: kibanaspec:selector:component: kibanaports:- name: httpport: 80targetPort: http---#ingressapiVersion: extensions/v1beta1kind: Ingressmetadata:name: kibananamespace: kube-systemspec:rules:- host: http:paths:- path: /backend:serviceName: kibanaservicePort: 80---apiVersion: apps/v1beta1kind: Deploymentmetadata:name: kibananamespace: kube-systemlabels:component: kibanaspec:replicas: 1selector:matchLabels:component: kibanatemplate:metadata:labels:component: kibanaspec:containers:- name: kibanaimage: /imooc/kibana:5.5.1 env:- name: CLUSTER_NAMEvalue: docker-cluster- name: ELASTICSEARCH_URLvalue: http://elasticsearch-api:9200/resources:limits:cpu: 1000mrequests:cpu: 100mports:- containerPort: 5601name: httpkibana.yaml。

Kubernetes(K8s)集群监控与日志管理方法

Kubernetes(K8s)集群监控与日志管理方法

Kubernetes(K8s)集群监控与日志管理方法Kubernetes(简称为K8s)是一个用于自动部署、扩展和管理容器化应用的开源平台。

随着容器技术的快速发展,Kubernetes已成为云原生应用开发和部署的事实标准。

然而,随着应用规模的增长和复杂性的提高,有效的集群监控和日志管理变得至关重要。

本文将介绍Kubernetes集群监控与日志管理的方法和工具。

一、集群监控方法Kubernetes集群监控旨在实时监测集群的状态、资源使用情况和应用程序性能。

下面列举了几种常见的集群监控方法:1. PrometheusPrometheus是一种开源的监控系统,专注于监控和警报。

通过Prometheus Operator,可以在Kubernetes上部署和管理Prometheus。

它可以收集各种指标,并提供灵活的查询语言PromQL来查询和分析数据。

2. GrafanaGrafana是一个流行的开源数据可视化工具,可与Prometheus集成,用于创建仪表盘和图表。

通过Grafana,用户可以直观地查看集群的监控数据,并进行数据分析和报表生成。

3. Elastic StackElastic Stack是一套用于日志管理和分析的工具集合,包括Elasticsearch、Logstash和Kibana。

在Kubernetes集群中,可以使用Filebeat或Fluentd来收集容器日志,并将其发送到Elasticsearch进行存储和索引。

然后,可以使用Kibana来搜索、分析和可视化日志数据。

4. HeapsterHeapster是Kubernetes的一个插件,用于收集和聚合集群中的监控数据。

它可以采集容器和主机的CPU、内存、网络等指标,并将这些数据存储在InfluxDB或Grafana等组件中。

Heapster提供了丰富的API接口和可视化界面,方便用户查看和导出监控数据。

二、日志管理方法Kubernetes集群中容器产生的大量日志需要进行有效的管理和检索,以便故障排查、安全审计和性能优化。

filebeat采集日志原理

filebeat采集日志原理

filebeat采集日志原理一、概述Filebeat是一个轻量级的开源数据采集器,主要用于将日志和文件数据发送到Elasticsearch或Logstash进行分析和可视化。

在ELK (Elasticsearch、Logstash、Kibana)堆栈中,Filebeat通常被用作数据采集器,负责将系统日志或应用程序日志发送到Elasticsearch或Logstash进行处理。

二、工作原理Filebeat的工作原理可以分为以下几个步骤:1. 读取文件Filebeat会定期读取指定目录下的文件,并将新添加到文件中的行标记为“待发送”。

2. 解析数据Filebeat会对待发送的行进行解析,并将其转换为JSON格式。

这些JSON对象包含了文件名、时间戳和文本内容等信息。

3. 发送数据Filebeat会将解析后的JSON对象发送到指定的输出目标,如Elasticsearch或Logstash等。

4. 处理响应如果输出目标返回响应,则Filebeat会对响应进行处理。

如果出现错误,则Filebeat会记录错误信息并尝试重新发送数据。

三、配置选项在使用Filebeat之前,需要通过配置文件指定要监视的文件路径、输出目标等信息。

常用的配置选项包括:1. filebeat.inputs:指定要监视的文件路径。

2. output.elasticsearch:指定要发送数据到Elasticsearch的地址。

3. output.logstash:指定要发送数据到Logstash的地址。

4. logging.level:指定日志记录级别。

四、优点使用Filebeat采集日志有以下几个优点:1. 轻量级Filebeat是一个轻量级的数据采集器,占用资源少,对系统性能影响小。

2. 灵活性Filebeat可以监视任何文件,并将数据发送到多种输出目标,如Elasticsearch、Logstash等。

3. 实时性Filebeat可以实时监视文件,并将新添加到文件中的行立即发送到输出目标。

Filebeats采集日志到ES

Filebeats采集日志到ES

Filebeats采集⽇志到ES什么是 Filebeat?Filebeat 是⼀个属于 Beats 系列的⽇志托运者 - ⼀组安装在主机上的轻量级托运⼈,⽤于将不同类型的数据传送到 ELK 堆栈进⾏分析。

每个Beat 专门⽤于传送不同类型的信息 - 例如,Winlogbeat 发布 Windows 事件⽇志,Metricbeat 发布主机指标等等。

顾名思义,Filebeat 提供⽇志⽂件。

在基于 ELK 的⽇志记录管道中,Filebeat 扮演⽇志代理的⾓⾊ - 安装在⽣成⽇志⽂件的计算机上,跟踪它们,并将数据转发到Logstash 以进⾏更⾼级的处理,或者直接转发到 Elasticsearch 进⾏索引。

因此,Filebeat 不是 Logstash 的替代品,但在⼤多数情况下可以并且应该同时使⽤。

您可以在本⽂中阅读有关 Beats 和 Filebeat 开发背后的故事的更多信息。

Logstash 需要运⾏ JVM,这种依赖性与 Ruby 中的实现相结合成为⼤量内存消耗的根本原因,尤其是涉及多个管道和⾼级过滤时。

Beats 是基于 Lumberjack 协议⽤ Go 语⾔编写的,旨在实现内存占⽤少,处理⼤量数据,⽀持加密以及有效处理背压。

例如,Filebeat 记录在注册表中索引的最后⼀条成功⾏,因此,如果⽹络问题或传输中断,Filebeat将记住重新建⽴连接时中断的位置。

如果输出,Logstash 或Elasticsearch 存在摄取问题,Filebeat 将减慢⽂件读取速度。

在选⽤ Filebeat 或者是 Logstash 呢?简单的答案是 - ⾄少在记录⽂件时,您⼏乎总是需要使⽤ Filebeat 和 Logstash 的组合。

为什么?因为除⾮您只对时间戳和消息字段感兴趣,否则仍需要 Logstash ⽤于 ETL(转换)中的 “T”,并充当多个⽇志记录管道的聚合器。

Filebeat 是当今最好的⽇志⽂件发送器之⼀ - 它轻量级,⽀持 SSL 和 TLS 加密,⽀持背压,具有良好的内置恢复机制,并且⾮常可靠。

ELK+filebeat收集K8S平台日志

ELK+filebeat收集K8S平台日志

IP 地址节点名称安装的服务192.168.10.171K8s-master NFS ,K8S 的必要组件服务192.168.10.172node-1NFS ,K8S 的必要组件服务192.168.10.173node-2NFS-server ,K8S 的必要组件服务ELK+filebeat 收集K8S 平台⽇志如果把⽇志保存在容器内部或通过数据卷挂载在宿主机上还是保持在远程存储上,⽐如保存在容器内部,也就是说没有经过任何改动,⾃是在容器⾥原封不动的启动了,起来之后⽇志还是和原来⼀样保持在原来的⽬录⾥,但是这个容器是会经常的删除,销毁和创建是常态。

因此我们需要⼀种持久化的保存⽇志⽅式。

如果⽇志还是放在容器内部,会随着容器删除⽽被删除容器数量很多,按照传统的查看⽇志⽅式变得不太现实容器本⾝特性容器密集,采集⽬标多:容器⽇志输出到控制台,docker 本⾝提供了⼀种能⼒来采集⽇志了。

如果落地到本地⽂件⽬前还没有⼀种好的采集⽅式容器的弹性伸缩:新扩容的pod 属性信息(⽇志⽂件路径,⽇志源)可能会发送变化收集那些⽇志K8S 系统的组件⽇志和应⽤程序⽇志,组件⽇志就是打到宿主机的固定⽂件和传统的⽇志收集⼀样,应⽤程序⽇志⼜分为了标准输出和⽇志⽂件ELK ⽇志收集的三个⽅案⼤致分为采集阶段→数据存储→分析→展⽰Node 上部署⼀个⽇志收集程序 DaemonSet ⽅式部署⽇志收集程序,对本节点/var/log/pods/或/var/lib/docker/containers/两个⽬录下的⽇志进⾏收集Pod 中附加专⽤⽇志收集的容器 每个运⾏应⽤程序的Pod 中增加⼀个⽇志收集容器,使⽤emtyDir 共享⽇志⽬录让⽇志收集程序读取到应⽤程序直接推送⽇志 应⽤程序直接将⽇志推送到远程存储上,不经过docker 的管理和kubernetes 的管理集群规划(kubeadm 安装)部署NFS部署NFS 是为了实现动态供给存储部署NFS 服务器,前提需要关闭防⽕墙和selinux yum install -y nfs-utils #所有的节点都需要安装配置NFS 共享的⽬录,no_root_squash 是挂载后以匿名⽤户进⾏使⽤,通常变成nobody [root@node-2 ~]# echo "/ifs/kubernetes 192.168.10.0/24(rw,no_root_squash)" > /etc/exports #多⾏不能使⽤清空⽅法,需要使⽤ >>进⾏追加[root@node-2 ~]# mkdir -p /ifs/kubernetes #共享⽬录不存在的话需要创建启动NFS 并设置开机⾃启动[root@node-2 ~]# systemctl enable nfs && systemctl start nfs查看已经共享的⽬录 (没有启动NFS 服务的节点不能查询)[root@node-2 ~]# showmount -eExport list for node-2:/ifs/kubernetes 192.168.10.0/24[root@node-2 ~]#部署NFS 实现⾃动创建PV 插件yum install -y gitgit clone https:///kubernetes-incubator/external-storagecd external-storage/nfs-client/deploy/#顺序部署kubectl apply -f rbac.yaml # 授权访问apiserverkubectl apply -f deployment.yaml # 部署插件,需要修改⾥⾯NFS 服务器地址和共享⽬录kubectl apply -f class.yaml # 创建存储类型,是否启⽤归档kubectl get sc # 查看存储类型在K8S 中部署ELK部署elasticsearch[root@k8s-maste ~]# cat elasticsearch.yamlapiVersion: apps/v1kind: StatefulSetmetadata:name: elasticsearchnamespace: kube-systemlabels:k8s-app: elasticsearchspec:serviceName: elasticsearchselector:matchLabels:k8s-app: elasticsearchtemplate:metadata:- image: elasticsearch:7.5.0name: elasticsearchresources:limits:cpu: 1memory: 2Girequests:cpu: 0.5memory: 500Mienv:- name: "discovery.type"value: "single-node"- name: ES_JAVA_OPTSvalue: "-Xms512m -Xmx2g"ports:- containerPort: 9200name: dbprotocol: TCPvolumeMounts:- name: elasticsearch-datamountPath: /usr/share/elasticsearch/datavolumeClaimTemplates:- metadata:name: elasticsearch-dataspec:storageClassName: "managed-nfs-storage"accessModes: [ "ReadWriteOnce" ]resources:requests:storage: 20Gi---apiVersion: v1kind: Servicemetadata:name: elasticsearchnamespace: kube-systemspec:clusterIP: Noneports:- port: 9200protocol: TCPtargetPort: dbselector:k8s-app: elasticsearch⽣效清单⽂件[root@k8s-maste ~]# kubectl apply -f elasticsearch.yaml statefulset.apps/elasticsearch createdservice/elasticsearch created[root@k8s-maste ~]# kubectl get pods -n kube-system elasticsearch-0 NAME READY STATUS RESTARTS AGE elasticsearch-0 1/1 Running 0 50s[root@k8s-maste ~]#部署kibana[root@k8s-maste ~]# cat kibana.yamlapiVersion: apps/v1kind: Deploymentmetadata:name: kibananamespace: kube-systemlabels:k8s-app: kibanaspec:replicas: 1selector:matchLabels:k8s-app: kibanatemplate:metadata:labels:k8s-app: kibanaspec:containers:- name: kibanaimage: kibana:7.5.0resources:limits:cpu: 1memory: 500Mirequests:cpu: 0.5memory: 200Mienv:- name: ELASTICSEARCH_HOSTSvalue: http://elasticsearch-0.elasticsearch.kube-system:9200 - name: I18N_LOCALEvalue: zh-CNports:- containerPort: 5601name: uiprotocol: TCP---namespace: kube-systemspec:type: NodePortports:- port: 5601protocol: TCPtargetPort: uinodePort: 30601selector:k8s-app: kibana⽣效清单⽂件[root@k8s-maste ~]# kubectl apply -f kibana.yamldeployment.apps/kibana createdservice/kibana created[root@k8s-maste ~]# kubectl get pods -n kube-system |grep kibanaNAME READY STATUS RESTARTS AGEkibana-6cd7b9d48b-jrx79 1/1 Running 0 3m3s[root@k8s-maste ~]# kubectl get svc -n kube-system kibanaNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkibana NodePort 10.98.15.252 <none> 5601:30601/TCP 105s[root@k8s-maste ~]#filebeat采集标准输出⽇志filebeat⽀持动态的获取容器的⽇志[root@k8s-maste ~]# cat filebeat-kubernetes.yamlapiVersion: v1kind: ConfigMapmetadata:name: filebeat-confignamespace: kube-systemlabels:k8s-app: filebeatdata:filebeat.yml: |-filebeat.config:inputs:# Mounted `filebeat-inputs` configmap:path: ${path.config}/inputs.d/*.yml# Reload inputs configs as they change:reload.enabled: falsemodules:path: ${path.config}/modules.d/*.yml# Reload module configs as they change:reload.enabled: false# To enable hints based autodiscover, remove `filebeat.config.inputs` configuration and uncomment this: #filebeat.autodiscover:# providers:# - type: kubernetes# hints.enabled: trueoutput.elasticsearch:hosts: ['${ELASTICSEARCH_HOST:elasticsearch}:${ELASTICSEARCH_PORT:9200}']---apiVersion: v1kind: ConfigMapmetadata:name: filebeat-inputsnamespace: kube-systemlabels:k8s-app: filebeatdata:kubernetes.yml: |-- type: dockercontainers.ids:- "*"processors:- add_kubernetes_metadata:in_cluster: true---apiVersion: apps/v1kind: DaemonSetmetadata:name: filebeatnamespace: kube-systemlabels:k8s-app: filebeatspec:selector:matchLabels:k8s-app: filebeattemplate:metadata:labels:k8s-app: filebeatspec:serviceAccountName: filebeatterminationGracePeriodSeconds: 30containers:- name: filebeatimage: elastic/filebeat:7.5.0- name: ELASTICSEARCH_HOSTvalue: elasticsearch-0.elasticsearch.kube-system- name: ELASTICSEARCH_PORTvalue: "9200"securityContext:runAsUser: 0# If using Red Hat OpenShift uncomment this:#privileged: trueresources:limits:memory: 200Mirequests:cpu: 100mmemory: 100MivolumeMounts:- name: configmountPath: /etc/filebeat.ymlreadOnly: truesubPath: filebeat.yml- name: inputsmountPath: /usr/share/filebeat/inputs.dreadOnly: true- name: datamountPath: /usr/share/filebeat/data- name: varlibdockercontainersmountPath: /var/lib/docker/containersreadOnly: truevolumes:- name: configconfigMap:defaultMode: 0600name: filebeat-config- name: varlibdockercontainershostPath:path: /var/lib/docker/containers- name: inputsconfigMap:defaultMode: 0600name: filebeat-inputs# data folder stores a registry of read status for all files, so we don't send everything again on a Filebeat pod restart- name: datahostPath:path: /var/lib/filebeat-datatype: DirectoryOrCreate---apiVersion: rbac.authorization.k8s.io/v1beta1kind: ClusterRoleBindingmetadata:name: filebeatsubjects:- kind: ServiceAccountname: filebeatnamespace: kube-systemroleRef:kind: ClusterRolename: filebeatapiGroup: rbac.authorization.k8s.io---apiVersion: rbac.authorization.k8s.io/v1beta1kind: ClusterRolemetadata:name: filebeatlabels:k8s-app: filebeatrules:- apiGroups: [""] # "" indicates the core API groupresources:- namespaces- podsverbs:- get- watch- list---apiVersion: v1kind: ServiceAccountmetadata:name: filebeatnamespace: kube-systemlabels:k8s-app: filebeat这⾥指定了es的路径output.elasticsearch:hosts: ['${ELASTICSEARCH_HOST:elasticsearch}:${ELASTICSEARCH_PORT:9200}']这⾥是⼀个处理器,他会⾃动的为⽇志添加k8s属性。

elkfilebeat搭建日志系统

elkfilebeat搭建日志系统

elkfilebeat 搭建日记系统Elasticsearch散布式搜寻和剖析引擎。

拥有高可伸缩、高靠谱和易管理等特色。

鉴于Apache Lucene 建立,能对大容量的数据进行接近及时的储存、搜寻和剖析操作。

Logstash日记采集器。

采集各样数据源,并对数据进行过滤、剖析、格式化等操作,而后储存到Elasticsearch。

Kibana数据剖析和可视化平台。

与 Elasticsearch 配合使用,对此中数据进行搜寻、剖析、图表展现。

Filebeat一个轻量级开源日记文件数据采集器, Filebeat 读取文件内容,发送到 Logstash 进行分析后进入 Elasticsearch,或直接发送到Elasticsearch 进行集中式储存和剖析。

架构介绍鉴于 ELK 的使用方式, Logstash 作为日记采集器,Elasticsearch 进行日记储存, Kibana 作为日记体现,大概以下几种架构。

架构一图中Logstash 多个的原由是考虑到程序是散布式架构的状况,每台机器都需要部署一个Logstash,假如的确是单服务器的状况部署一个Logstash 即可。

前面提到Logstash 会对数据进行剖析、过滤、格式化等操作,这一系列操作对服务器的CPU 和内存资源的耗费都是比较高的,因此这类架构会影响每台服务器的性能,因此并不介绍采纳。

架构二对比于架构一,增添了一个MQ和Logstash,Logstash 的输出和输入支持Kafka 、Redis、RabbitMQ等常见信息行列,MQ 前的Logstash 只作为日记采集和传输,其实不分析和过滤,先将日记加入行列,由MQ 后边的Logstash 持续分析和过滤,这样就不至于每台服务器耗费费源都好多。

架构三这类架构是鉴于架构二简化来的,实质在使用过程中也是能够采纳的,日记直接进入MQ ,Logstash 花费MQ数据即可。

架构四这类架构在日记数据源和Logstash(或 Elasticsearch)中增添了Beats 。

基于ELK的运维辅助系统的设计与实现

基于ELK的运维辅助系统的设计与实现

基于ELK的运维辅助系统的设计与实现作者:李书达刘遵仁朱琦来源:《青岛大学学报(工程技术版)》2022年第01期文章编号: 10069798(2022)01001806; DOI: 10.13306/j.10069798.2022.01.003摘要:针对分布式集群在服务出现异常情况下存在的无法快速定位到异常所在服务器,并获取报错详情的问题,本文采用技术栈(elasticsearch,ELK)捕获异常,并解析日志内容来展示详情,以实现快速定位,最终以邮件形式告知运维人员进行处理。

测试结果表明,部署在A公司多台服务器上的集群出现异常后,本系统最快可在2 s内监控到异常,5 s内完成对运维人员的邮件通知,邮件内容包括问题发生时详细信息,方便运维人员快速定位问题。

本系统大大缩短了运维人员处理故障时间,提升了运维效率,降低了公司损失,可以辅助运维人员实现对多服务器集群的监控,做到对异常集群的快速定位。

该研究对企业分布式集群节点的异常定位具有重要意义。

关键词: ELK; 辅助运维; 大数据; 日志中图分类号: TP311.13文献标识码: A随着互联网飞速发展,高速网络不但增加了用户体验,也增加了企业服务器负载压力,在此情况下,分布式集群成为企业服务器应对大数据高并发场景的主流解决方案[1]。

分布式集群保证机器宕机时仍有其余机器可对外提供访问,但如果代码层面出现异常,不能被及时发现并修正,也会造成严重损失,因此深入代码层面的监控对企业意义重大。

日志记录了各自服务器运行时的核心信息,这对定位问题具有重要作用,所以利用好服务器日志成为关键点。

近年来,为方便管理大型集群,一些团队设计了集群监控系统,但与日志相关的功能并不丰富。

Zabbix是一个常用的集群监控系统,其实现了多条报警及自带画图功能,当集群出现异常时,可以执行对应的紧急预案脚本自动修复[2];Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库,其通过超文本传输协议(hypertext transfer protocol,HTTP),周期性抓取被监控组件的状态,组件只需提供对应的HTTP接口就可接入监控,不需要任何软件开发工具包或者其他集成过程[3]。

es日志采集存储方法

es日志采集存储方法

es日志采集存储方法
以下是几种常用的日志采集存储方法:
1. 通过Filebeat采集:Filebeat是最常用的日志采集方法之一。

通过使用Filebeat,您可以使用Elastic提供的模块,或创建自己的input来收集日志。

2. Elasticsearch作为日志存储介质:由于Elasticsearch的查询便利性和与Kibana的可视化查询功能,许多项目选择使用Elasticsearch作为日志的存储介质。

3. 使用Logstash:Logstash可以用于对数据进行清洗,并通过Logstash 对数据和外部数据库进行丰富等操作。

它还提供了一个缓冲的作用,特别是针对大量生成日志的情况。

4. 使用Kafka:针对大量数据,Kafka是一个常用的解决方法。

它可以起到缓冲的作用。

5. 使用ElasticsearchAppender:通过集成ElasticsearchAppender插件的方式采集日志,具体操作包括在中引入依赖,并在中新增appender。

请注意,每种方法都有其适用的场景和优势,根据实际需求选择最适合的方法是关键。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

日志是记 录系 统行 为 的一 种方 式,具有 非常 重要 的作 用.日志信息可 作为系统 排错和 性能优化 的依据 : 通过 日志,可 以有 效的监控系统 的运行状况,如性能信 息 、故障检 测 、入 侵检 测等:日志可 以用于用 户 的行 为信 息分析 ,发现潜在 商机 ;日志可 以帮助开发人 员找 到 bug的来源,修 复漏洞.并且 随着 数据挖掘 、大数据
① 收稿 时间 :2018—01—03;修 改时 间:2018,01.23;采用 时 间:2018—02—27;csa在线 出版 时 间:2018.08.16
http://ww w .C—S·a.org.ca Tel:+86-10.62661041
基于 Filebeat自动收 集 Kubernetes日志 的分析系统①
翟雅 荣 l, ,于 金 刚
(中 国科 学 院 大 学 ,北 京 100049) (中国科 学院 沈阳计算技术研 究所,沈阳 1 10168) 通 讯作 者:翟雅 荣,E.mail:zhaiyarong@126.com
ZHA I Ya.Rong ,YU Jin—G ang
(University of Chinese Academy of Sciences,Beijing 100049,China) (Shenyang Institute of Computing Technology,Chinese Academy of Sciences,Shenyang 1 1 0 1 68,China) Abstract:The logs generated by Docker containers are scattered in different isolated containers,and the container has the characteristics of“ready to use”.The traditional solution is to m ount the log files to the host,but th e containers often drif t, bringing challenges to the unified view of the log,w hile the traditional D ocker container log analysis system has the problem s of w eak expansibility and low efi ciency.This study uses Kubernetes to im plem ent container m anagem ent, service discovery and scheduling,uses Filebeat to collect log files on containers and host computers,Redis as a cache, Logstash forwarding,and uses th e m ainstream open source log collection system ELK to store,view ,and retrieve log.The system has the characteristics of real time,reliability and extensibility,and improves the efi ciency of operation and m aintenance personne1. K ey words:log collection and analysis;Kubem etes;Filebeat;Docker;ELK
摘 要 :Docker容器产生 的 日志分散 在不 同的相互 隔离的容 器 中,并且容器具有 即用即销的特点,传统 的解 决方式 是将 日志文件挂载到宿主机上,但 是容器 经常会漂移,给 日志 的统一查 看带来 挑战,并且传统 的 Docker容器集群 日 志分 析 系 统 存在 扩 展 性 弱 、效 率 低 下等 问题 .本 文 采 用 Kubernetes实现 容 器 管 理 、服 务 发 现及 调 度 ,使 用 Filebeat采集 容器及宿 主机上 的 日志文 件,并使用 Redis作 为缓存,Logstash转 发,使 用主流 的开源 日志收集系 统 ELK实 现 日志的存储 、查看 、检索.该系统具有可靠性 、可扩展 性等特 点,提高运维人员的工作效率. 关键 词:日志收集与分析:Kubemetes;Filebeat;Docker;ELK
计 算机 系 统应 用 ISSN 1003-3254,CODEN CSAOBN
Computer Systems& Applications,2018,27(9):8卜 86[doi:10.15888 ̄.cnki.csa.006528】 ◎中 国科 学 院软件 研 究所版 权所 有 .
E—mail:csa@iscasac.cn
引用格 式:翟雅 荣,于金剐.基于 Filebeat自动收集 Kubernetes日志的分析系统.计 算机 系统应用,2018,27(9):81—86.http://www.C—S—a.org.cn/1003-
3254/6528.html
Analysis System Based on Filebeat Autom ated Collection of K ubernetes Log
等技术 的不 断发展,数据也 愈发凸显重要,日志作为数 据 分析 的一大 来源 ,日志收集 分析 系统也 愈发 凸显重 要.但随着互 联网 、大数据等快 速发展,系统应用越来 越 复杂,规模越来越大,系统产生 的 日志 急剧增 加[1】,给 曰志的收集 、存储 和分析带来很多挑战.
传 统 的 日志存 储在 本机磁 盘上 ,查 看 日志时 需要
相关文档
最新文档