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

怎么看网站是哪个系统做的山西网站推

怎么看网站是哪个系统做的,山西网站推,一千个长尾关键词用一千个网站做,网站维护描述目录 一、统一日志管理的整体方案 1、基础日志 2、Node级别的日志 3、集群级别的日志架构 二、安装统一日志管理组件 1、 部署Elasticsearch 2、部署Fluentd 3、部署Kibana 三、日志数据展示 一、统一日志管理的整体方案 通过应用和系统日志可以了解Kubernetes集群内…目录 一、统一日志管理的整体方案 1、基础日志 2、Node级别的日志 3、集群级别的日志架构 二、安装统一日志管理组件 1、 部署Elasticsearch 2、部署Fluentd 3、部署Kibana 三、日志数据展示 一、统一日志管理的整体方案 通过应用和系统日志可以了解Kubernetes集群内所发生的事情对于调试问题和监视集群活动来说日志非常有用。对于大部分的应用来说都会具有某种日志机制。因此大多数容器引擎同样被设计成支持某种日志机制。 对于容器化应用程序来说最简单和最易接受的日志记录方法是将日志内容写入到标准输出和标准错误流。 但是容器引擎或运行时提供的本地功能通常不足以支撑完整的日志记录解决方案。例如如果一个容器崩溃、一个Pod被驱逐、或者一个Node死亡应用相关者可能仍然需要访问应用程序的日志。 因此日志应该具有独立于Node、Pod或者容器的单独存储和生命周期这个概念被称为集群级日志记录。集群级日志记录需要一个独立的后端来存储、分析和查询日志。Kubernetes本身并没有为日志数据提供原生的存储解决方案但可以将许多现有的日志记录解决方案集成到Kubernetes集群中。在Kubernetes中有三个层次的日志 基础日志 Node级别的日志 群集级别的日志架构 1、基础日志 kubernetes基础日志即将日志数据输出到标准输出流可以使用kubectl logs命令获取容器日志信息。如果Pod中有多个容器可以通过将容器名称附加到命令来指定要访问哪个容器的日志。例如在Kubernetes集群中的kube-system命名空间下有一个名称为etcd-master的Pod就可以通过如下的命令获取日志 [rootmaster log]# kubectl logs etcd-master -n kube-system 2、Node级别的日志 容器化应用写入到stdout和stderr的所有内容都是由容器引擎处理和重定向的。例如docker容器引擎会将这两个流重定向到日志记录驱动在Kubernetes中该日志驱动被配置为以json格式写入文件。docker json日志记录驱动将每一行视为单独的消息。当使用docker日志记录驱动时并不支持多行消息因此需要在日志代理级别或更高级别上处理多行消息。 默认情况下如果容器重新启动kubectl将会保留一个已终止的容器及其日志。如果从Node中驱逐Pod那么Pod中所有相应的容器也会连同它们的日志一起被驱逐。Node级别的日志中的一个重要考虑是实现日志旋转这样日志不会消耗Node上的所有可用存储。Kubernetes目前不负责轮转日志部署工具应该建立一个解决方案来解决这个问题。 在Kubernetes中有两种类型的系统组件运行在容器中的组件和不在容器中运行的组件。例如 Kubernetes调度器和kube-proxy在容器中运行。 kubelet和容器运行时例如docker不在容器中运行。 在带有systemd的机器上kubelet和容器运行时写入journaId。如果systemd不存在它们会在/var/log目录中写入.log文件。在容器中的系统组件总是绕过默认的日志记录机制写入到/var/log目录它们使用golg日志库。可以找到日志记录中开发文档中那些组件记录严重性的约定。 类似于容器日志在/var/log目录中的系统组件日志应该被轮转。这些日志被配置为每天由logrotate进行旋转或者当大小超过100mb时进行旋转。 3、集群级别的日志架构 Kubernetes本身没有为群集级别日志记录提供原生解决方案但有几种常见的方法可以采用 使用运行在每个Node上的Node级别的日志记录代理 在应用Pod中包含一个用于日志记录的sidecar。 将日志直接从应用内推到后端。 经过综合考虑本文档采用通过在每个Node上包括Node级别的日志记录代理来实现群集级别日志记录。日志记录代理暴露日志或将日志推送到后端的专用工具。通常logging-agent是一个容器此容器能够访问该Node上的所有应用程序容器的日志文件。 因为日志记录必须在每个Node上运行所以通常将它作为DaemonSet副本、或一个清单Pod或Node上的专用本机进程。然而后两种方法后续将会被放弃。使用Node级别日志记录代理是Kubernetes集群最常见和最受欢迎的方法因为它只为每个节点创建一个代理并且不需要对节点上运行的应用程序进行任何更改。但是Node级别日志记录仅适用于应用程序的标准输出和标准错误。 Kubernetes本身并没有指定日志记录代理但是有两个可选的日志记录代理与Kubernetes版本打包发布和谷歌云平台一起使用的Stackdriver和Elasticsearch两者都使用自定义配置的fluentd作为Node上的代理。在本文的方案中Logging-agent 采用 Fluentd而 Logging Backend 采用 Elasticsearch前端展示采用kibana。即通过 Fluentd 作为 Logging-agent 收集日志并推送给后端的Elasticsearchkibana从Elasticsearch中获取日志并进行统一的展示。 三种收集方案的优缺点 二、安装统一日志管理组件 在本文中采用方案一使用Node日志记录代理的方面进行Kubernetes的统一日志管理相关的工具采用 日志记录代理logging-agent日志记录代理用于从容器中获取日志信息使用Fluentd 日志记录后台Logging-Backend日志记录后台用于处理日志记录代理推送过来的日志使用Elasticsearch 日志记录展示日志记录展示用于向用户显示统一的日志信息使用Kibana。 在Kubernetes中通过了Elasticsearch 附加组件此组件包括Elasticsearch、Fluentd和Kibana。Elasticsearch是一种负责存储日志并允许查询的搜索引擎。Fluentd从Kubernetes中获取日志消息并发送到Elasticsearch而Kibana是一个图形界面用于查看和查询存储在Elasticsearch中的日志。 1、 部署Elasticsearch Elasticsearch是一个基于Apache Lucene(TM)的开源搜索和数据分析引擎引擎Elasticsearch使用Java进行开发并使用Lucene作为其核心实现所有索引和搜索的功能。它的目的是通过简单的RESTful API来隐藏Lucene的复杂性从而让全文搜索变得简单。Elasticsearch不仅仅是Lucene和全文搜索它还提供如下的能力 分布式的实时文件存储每个字段都被索引并可被搜索 分布式的实时分析搜索引擎 可以扩展到上百台服务器处理PB级结构化或非结构化数据。 在Elasticsearch中包含多个索引Index相应的每个索引可以包含多个类型Type这些不同的类型每个都可以存储多个文档Document每个文档又有多个属性。索引 (index) 类似于传统关系数据库中的一个数据库是一个存储关系型文档的地方。Elasticsearch 使用的是标准的 RESTful API 和 JSON。此外还构建和维护了很多其他语言的客户端例如 Java, Python, .NET, 和 PHP。 下面是Elasticsearch的YAML配置文件在此配置文件中定义了一个名称为elasticsearch-logging的ServiceAccount并授予其能够对命名空间、服务和端点读取的访问权限并以StatefulSet类型部署Elasticsearch。 [rootmaster log]# vim es-statefulset.yaml kind: Namespace apiVersion: v1 metadata:name: logginglabels:k8s-app: loggingkubernetes.io/cluster-service: trueaddonmanager.kubernetes.io/mode: Reconcile --- # RBAC authn and authz apiVersion: v1 kind: ServiceAccount metadata:name: elasticsearch-loggingnamespace: logginglabels:k8s-app: elasticsearch-loggingaddonmanager.kubernetes.io/mode: Reconcile --- kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata:name: elasticsearch-logginglabels:k8s-app: elasticsearch-loggingaddonmanager.kubernetes.io/mode: Reconcile rules:- apiGroups:- resources:- services- namespaces- endpointsverbs:- get --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata:name: elasticsearch-logginglabels:k8s-app: elasticsearch-loggingaddonmanager.kubernetes.io/mode: Reconcile subjects:- kind: ServiceAccountname: elasticsearch-loggingnamespace: loggingapiGroup: roleRef:kind: ClusterRolename: elasticsearch-loggingapiGroup: --- # Elasticsearch deployment itself apiVersion: apps/v1 kind: StatefulSet metadata:name: elasticsearch-loggingnamespace: logginglabels:k8s-app: elasticsearch-loggingversion: v7.10.2addonmanager.kubernetes.io/mode: Reconcile spec:serviceName: elasticsearch-loggingreplicas: 2selector:matchLabels:k8s-app: elasticsearch-loggingversion: v7.10.2template:metadata:labels:k8s-app: elasticsearch-loggingversion: v7.10.2spec:serviceAccountName: elasticsearch-loggingcontainers:- image: quay.io/fluentd_elasticsearch/elasticsearch:v7.10.2name: elasticsearch-loggingimagePullPolicy: IfNotPresentresources:# need more cpu upon initialization, therefore burstable classlimits:cpu: 1000mmemory: 3Girequests:cpu: 100mmemory: 3Giports:- containerPort: 9200name: dbprotocol: TCP- containerPort: 9300name: transportprotocol: TCPlivenessProbe:tcpSocket:port: transportinitialDelaySeconds: 5timeoutSeconds: 10readinessProbe:tcpSocket:port: transportinitialDelaySeconds: 5timeoutSeconds: 10volumeMounts:- name: elasticsearch-loggingmountPath: /dataenv:- name: NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: MINIMUM_MASTER_NODESvalue: 1volumes:- name: elasticsearch-loggingemptyDir: {}# Elasticsearch requires vm.max_map_count to be at least 262144.# If your OS already sets up this number to a higher value, feel free# to remove this init container.initContainers:- image: alpine:3.6command: [/sbin/sysctl, -w, vm.max_map_count262144]name: elasticsearch-logging-initsecurityContext:privileged: true 通过执行如下的命令部署Elasticsearch [rootmaster log]# kubectl create -f es-statefulset.yaml 下面Elasticsearch的代理服务YAML配置文件代理服务暴露的端口为9200。 [rootmaster log]# vim es-service.yaml apiVersion: v1 kind: Service metadata:name: elasticsearch-loggingnamespace: logginglabels:k8s-app: elasticsearch-loggingkubernetes.io/cluster-service: trueaddonmanager.kubernetes.io/mode: Reconcilekubernetes.io/name: Elasticsearch spec:clusterIP: Noneports:- name: dbport: 9200protocol: TCPtargetPort: 9200- name: transportport: 9300protocol: TCPtargetPort: 9300publishNotReadyAddresses: trueselector:k8s-app: elasticsearch-loggingsessionAffinity: Nonetype: ClusterIP 通过执行如下的命令部署Elasticsearch的代理服务 [rootmaster log]# kubectl create -f es-service.yaml 2、部署Fluentd Fluentd是一个开源数据收集器通过它能对数据进行统一收集和消费能够更好地使用和理解数据。Fluentd将数据结构化为JSON从而能够统一处理日志数据包括收集、过滤、缓存和输出。Fluentd是一个基于插件体系的架构包括输入插件、输出插件、过滤插件、解析插件、格式化插件、缓存插件和存储插件通过插件可以扩展和更好的使用Fluentd。 Fluentd的整体处理过程如下通过Input插件获取数据并通过Engine进行数据的过滤、解析、格式化和缓存最后通过Output插件将数据输出给特定的终端。 在本文中 Fluentd 作为 Logging-agent 进行日志收集并将收集到的日志推送给后端的Elasticsearch。对于Kubernetes来说DaemonSet确保所有或一些Node会运行一个Pod副本。因此Fluentd被部署为DaemonSet它将在每个节点上生成一个pod以读取由kubelet容器运行时和容器生成的日志并将它们发送到Elasticsearch。为了使Fluentd能够工作每个Node都必须标记beta.kubernetes.io/fluentd-ds-readytrue。 [rootmaster log]# kubectl label nodes node1 beta.kubernetes.io/fluentd-ds-readytrue ​ [rootmaster log]# kubectl label nodes node2 beta.kubernetes.io/fluentd-ds-readytrue 下面是Fluentd的ConfigMap配置文件此文件定义了Fluentd所获取的日志数据源以及将这些日志数据输出到Elasticsearch中。 在Fluented配置文件中有下面的一些关键指令 source指令确定输入源。 match指令确定输出目标。 filter指令确定事件处理管道。 system指令设置系统范围的配置。 label指令将输出和过滤器分组以进行内部路由 include ** **指令包含其他文件。 [rootmaster log]# fluentd-es-configmap.yaml --- apiVersion: v1 kind: ConfigMap metadata:name: fluent-bit-confignamespace: logginglabels:k8s-app: fluent-bit data:# Configuration files: server, input, filters and output# fluent-bit.conf: |[SERVICE]Flush         1Log_Level     infoDaemon       offParsers_File parsers.confHTTP_Server   OnHTTP_Listen   0.0.0.0HTTP_Port     2020 ​INCLUDE input-kubernetes.confINCLUDE filter-kubernetes.confINCLUDE output-elasticsearch.conf ​input-kubernetes.conf: |[INPUT]Name             tailTag               kube.*Path             /var/log/containers/*.logParser           dockerDB               /var/log/flb_kube.dbMem_Buf_Limit     20MBSkip_Long_Lines   OnRefresh_Interval 10 ​filter-kubernetes.conf: |[FILTER]Name               kubernetesMatch               kube.*Kube_URL           https://kubernetes.default.svc:443Kube_CA_File       /var/run/secrets/kubernetes.io/serviceaccount/ca.crtKube_Token_File     /var/run/secrets/kubernetes.io/serviceaccount/tokenKube_Tag_Prefix     kube.var.log.containers.Merge_Log           OnMerge_Log_Key       log_processedK8S-Logging.Parser OnK8S-Logging.Exclude Off ​output-elasticsearch.conf: |[OUTPUT]Name           esMatch           *Host           ${FLUENT_ELASTICSEARCH_HOST}Port           ${FLUENT_ELASTICSEARCH_PORT}Logstash_Format OnReplace_Dots   OnRetry_Limit     False ​parsers.conf: |[PARSER]Name   apacheFormat regexRegex ^(?host[^ ]*) [^ ]* (?user[^ ]*) \[(?time[^\]]*)\] (?method\S)(?: (?path[^\]*?)(?: \S*)?)? (?code[^ ]*) (?size[^ ]*)(?: (?referer[^\]*) (?agent[^\]*))?$Time_Key timeTime_Format %d/%b/%Y:%H:%M:%S %z ​[PARSER]Name   apache2Format regexRegex ^(?host[^ ]*) [^ ]* (?user[^ ]*) \[(?time[^\]]*)\] (?method\S)(?: (?path[^ ]*) \S*)? (?code[^ ]*) (?size[^ ]*)(?: (?referer[^\]*) (?agent[^\]*))?$Time_Key timeTime_Format %d/%b/%Y:%H:%M:%S %z ​[PARSER]Name   apache_errorFormat regexRegex ^\[[^ ]* (?time[^\]]*)\] \[(?level[^\]]*)\](?: \[pid (?pid[^\]]*)\])?( \[client (?client[^\]]*)\])? (?message.*)$ ​[PARSER]Name   nginxFormat regexRegex ^(?remote[^ ]*) (?host[^ ]*) (?user[^ ]*) \[(?time[^\]]*)\] (?method\S)(?: (?path[^\]*?)(?: \S*)?)? (?code[^ ]*) (?size[^ ]*)(?: (?referer[^\]*) (?agent[^\]*))?$Time_Key timeTime_Format %d/%b/%Y:%H:%M:%S %z ​[PARSER]Name   jsonFormat jsonTime_Key timeTime_Format %d/%b/%Y:%H:%M:%S %z ​[PARSER]Name       dockerFormat     jsonTime_Key   timeTime_Format %Y-%m-%dT%H:%M:%S.%LTime_Keep   On ​[PARSER]# http://rubular.com/r/tjUt3Awgg4Name criFormat regexRegex ^(?time[^ ]) (?streamstdout|stderr) (?logtag[^ ]*) (?message.*)$Time_Key   timeTime_Format %Y-%m-%dT%H:%M:%S.%L%z ​[PARSER]Name       syslogFormat     regexRegex       ^\(?pri[0-9])\(?time[^ ]* {1,2}[^ ]* [^ ]*) (?host[^ ]*) (?ident[a-zA-Z0-9_\/\.\-]*)(?:\[(?pid[0-9])\])?(?:[^\:]*\:)? *(?message.*)$Time_Key   timeTime_Format %b %d %H:%M:%S 通过执行如下的命令创建Fluentd的ConfigMap [rootmaster log]# kubectl create -f fluentd-es-configmap.yaml Fluentd本身的YAML配置文件如下所示 [rootmaster log]# vim fluentd-es-ds.yaml apiVersion: v1 kind: ServiceAccount metadata:name: fluent-bitnamespace: logging --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata:name: fluent-bit-read rules: - apiGroups: []resources:- namespaces- podsverbs: [get, list, watch] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata:name: fluent-bit-read roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: fluent-bit-read subjects: - kind: ServiceAccountname: fluent-bitnamespace: logging --- apiVersion: apps/v1 kind: DaemonSet metadata:name: fluent-bitnamespace: logginglabels:k8s-app: fluent-bit-loggingversion: v1kubernetes.io/cluster-service: true spec:selector:matchLabels:k8s-app: fluent-bit-loggingtemplate:metadata:labels:k8s-app: fluent-bit-loggingversion: v1kubernetes.io/cluster-service: trueannotations:prometheus.io/scrape: trueprometheus.io/port: 2020prometheus.io/path: /api/v1/metrics/prometheusspec:containers:- name: fluent-bitimage: fluent/fluent-bit:1.5imagePullPolicy: Alwaysports:- containerPort: 2020env:- name: FLUENT_ELASTICSEARCH_HOSTvalue: elasticsearch-logging.logging.svc.cluster.local- name: FLUENT_ELASTICSEARCH_PORTvalue: 9200volumeMounts:- name: varlogmountPath: /var/log- name: varlibdockercontainersmountPath: /var/lib/docker/containersreadOnly: true- name: fluent-bit-configmountPath: /fluent-bit/etc/terminationGracePeriodSeconds: 10volumes:- name: varloghostPath:path: /var/log- name: varlibdockercontainershostPath:path: /var/lib/docker/containers- name: fluent-bit-configconfigMap:name: fluent-bit-configserviceAccountName: fluent-bittolerations:- key: node-role.kubernetes.io/masteroperator: Existseffect: NoSchedule- operator: Existseffect: NoExecute- operator: Existseffect: NoSchedule 通过执行如下的命令部署Fluentd [rootmaster log]# kubectl create -f fluentd-es-ds.yaml 3、部署Kibana Kibana是一个开源的分析与可视化平台被设计用于和Elasticsearch一起使用的。通过kibana可以搜索、查看和交互存放在Elasticsearch中的数据利用各种不同的图表、表格和地图等Kibana能够对数据进行分析与可视化。Kibana部署的YAML如下所示通过环境变量ELASTICSEARCH_URL指定所获取日志数据的Elasticsearch服务此处为http://elasticsearch-logging:9200elasticsearch.cattle-logging是elasticsearch在Kubernetes中代理服务的名称。 [rootmaster log]# vim kibana-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata:name: kibana-loggingnamespace: logginglabels:k8s-app: kibana-loggingaddonmanager.kubernetes.io/mode: Reconcile spec:replicas: 1selector:matchLabels:k8s-app: kibana-loggingtemplate:metadata:labels:k8s-app: kibana-loggingspec:securityContext:seccompProfile:type: RuntimeDefaultcontainers:- name: kibana-loggingimage: docker.elastic.co/kibana/kibana-oss:7.10.2resources:# need more cpu upon initialization, therefore burstable classlimits:cpu: 1000mrequests:cpu: 100menv:- name: ELASTICSEARCH_HOSTSvalue: http://elasticsearch-logging:9200- name: SERVER_NAMEvalue: kibana-logging- name: SERVER_BASEPATHvalue: # value: /api/v1/namespaces/logging/services/kibana-logging/proxy# - name: SERVER_REWRITEBASEPATH# value: falseports:- containerPort: 5601name: uiprotocol: TCP#livenessProbe:# httpGet:# path: /api/status# port: ui# initialDelaySeconds: 5# timeoutSeconds: 10#readinessProbe:# httpGet:# path: /api/status# port: ui# initialDelaySeconds: 5# timeoutSeconds: 10 通过执行如下的命令部署Kibana的代理服务 [rootmaster log]# kubectl create -f kibana-deployment.yaml 下面Kibana的代理服务YAML配置文件代理服务的类型为NodePort。 [rootmaster log]# vim kibana-service.yaml --- apiVersion: v1 kind: Service metadata:name: kibana-loggingnamespace: logginglabels:k8s-app: kibana-loggingkubernetes.io/cluster-service: trueaddonmanager.kubernetes.io/mode: Reconcilekubernetes.io/name: Kibana spec:type: NodePortports:- port: 5601protocol: TCPtargetPort: uiselector:k8s-app: kibana-logging 通过执行如下的命令部署Kibana的代理服务 [rootmaster log]# kubectl create -f kibana-service.yaml 三、日志数据展示 获取Kibana的对外暴露的端口 [rootmaster log]# kubectl get svc --namespacekube-system 从输出的信息可以知道kibana对外暴露的端口为32639因此在Kubernetes集群外可以通过http://{NodeIP}:32639 访问kibana 通过点击Discover添加索引就能够实时看到从容器中获取到的日志信息 例如添加索引logstash-*,添加完成效果如下
http://www.huolong8.cn/news/56362/

相关文章:

  • 中企动力 网站价格免费搭建单页网站
  • 如何建设一个双语的网站烦恼可以做网站吗
  • 导购类网站模板wordpress首页缓存
  • 广西seo网站母婴类网站 网站建设方案书 备案
  • 苏州哪里做网站青岛济南网站建设优化
  • 建设银行官方网站手机版下载类似淘宝的网站怎么做的
  • 基因数据库网站建设seo工具不包括
  • 怎么样学做网站简单h5
  • 专业房地产网站建设网站建设月流量
  • 做外贸最好的网站建设如何在wordpress中添加背景音乐
  • 北京市住房城乡建设厅网站首页百度知道推广软件
  • 龙岩网站推广h5响应式网站源码下载
  • 石家庄最新大事建设和优化网站的步骤
  • 椒江做网站wordpress编辑器不行
  • 锒川市住房和城乡建设局网站公告oppo网站开发设计
  • 商家产品展示网站源码加拿大购物网站排名
  • 网站访客qq号码获取企业网站建设和运营
  • 网站建设公司十大部门门户网站建设请示
  • 建设工程施工许可证在哪个网站办python做一个简单的网页
  • 怎么找人帮做网站WordPress 布局 企业网站
  • 网站注册备案之后怎么做网站php怎么创建网站
  • 响应式网站开发pdf网站备案查询姓名
  • 海珠区pc端网站建设如何做网站拓扑结构图
  • 免费推广店铺的网站怎么用源码搭建网站
  • 潍坊中脉网站建设广东网站建设系统
  • 用wordpress建立的网站网络推广方式有哪几种
  • 英语教学网站建设意见项目营销推广方案
  • 长沙的网站建设公司哪家好搜索更多网页内容
  • dw做网站是静态还是动态凡科网站建设网页怎么建
  • 网站的技术分析天津建设网投标网站