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

影视网站怎么做怎么申请免费网站

影视网站怎么做,怎么申请免费网站,网站建设费的会计分录,免费seo课程Prometheus //Prometheus 概述#xff1a; Prometheus 是一个开源的服务监控系统和时序数据库#xff0c;其提供了通用的数据模型和快捷数据采集、存储和查询接口。它的核心组件 Prometheus server 会定期从静态配置的监控目标或者基于服务发现自动配置的目标中进行拉取数据…Prometheus //Prometheus 概述 Prometheus 是一个开源的服务监控系统和时序数据库其提供了通用的数据模型和快捷数据采集、存储和查询接口。它的核心组件 Prometheus server 会定期从静态配置的监控目标或者基于服务发现自动配置的目标中进行拉取数据当新拉取到的数据大于配置的内存缓存区时数据就会持久化到存储设备当中。每个采样数据占3.5 bytes左右300万的时间序列30s间隔保留60天消耗磁盘大概200G。 每个被监控的主机都可以通过专用的 exporter 程序提供输出监控数据的接口它会在目标处收集监控数据并暴露出一个 HTTP接口供 Prometheus server 查询Prometheus 通过基于 HTTP 的 pull 的方式来周期性的采集数据。  如果存在告警规则则抓取到数据之后会根据规则进行计算满足告警条件则会生成告警并发送到 Alertmanager 完成告警的汇总和分发。 当被监控的目标有主动推送数据的需求时可以以 Pushgateway 组件进行接收并临时存储数据然后等待 Prometheus server 完成数据的采集。 任何被监控的目标都需要事先纳入到监控系统中才能进行时序数据采集、存储、告警和展示监控目标可以通过配置信息以静态形式指定也可以让 Prometheus 通过服务发现的机制进行动态管理。 Prometheus 能够直接把 API Server 作为服务发现系统使用进而动态发现和监控集群中的所有可被监控的对象。  //Prometheus的特点 ●多维数据模型由度量名称和键值对标识的时间序列数据 ●内置时间序列数据库TSDB   外置的通常会用Thanos ●promQL一种灵活的查询语言可以利用多维数据完成复杂查询 ●基于HTTP的pull拉取方式采集时间序列数据 ●同时支持PushGateway组件收集数据 ●通过服务发现或静态配置发现目标 ●支持作为数据源接入Grafana Prometheus 生态系统包含了几个关键的组件Prometheus server、Exporter、Pushgateway、Alertmanager、Web UI 等 但是大多数组件都不是必需的。 其中最核心的组件是 Prometheus server它负责收集和存储指标数据支持表达式查询和告警的生成。 //Prometheus server由三个部分组成RetrievalStoragePromQL ●Retrieval负责在活跃的 target 主机上抓取监控指标数据。 ●Storage存储主要是把采集到的数据存储到磁盘中。 ●PromQL是 Prometheus 提供的查询语言模块。 //组件说明 1Prometheus server服务核心组件采用 pull 方式收集 apiserver、scheduler、controller-manager、kubelet 组件数据 通过 http 协议传输。并存储时间序列数据。 2Exporters/Jobs负责收集不支持Instrumentation的目标对象host, container…的性能数据并通过 HTTP 接口供 Prometheus Server 获取。 ●Node-Exporter用于收集k8s集群中各node节点的物理指标状态数据如平均负载、CPU、内存、磁盘、网络等资源信息的指标数据需要部署到所有运算节点。 ●Kube-State-Metrics为prometheus采集k8s资源数据的exporter通过监听APIServer收集kubernetes集群内资源对象的状态指标数据例如pod、deployment、service等等。同时它也提供自己的数据主要是资源采集个数和采集发生的异常次数统计。 需要注意的是kube-state-metrics只是简单的提供一个metrics数据并不会存储这些指标数据所以可以使用Prometheus来抓取这些数据然后存储主要关注的是业务相关的一些元数据比如Deployment、Pod、副本状态等调度了多少个replicas现在可用的有几个多少个Pod是running/stopped/terminated状态Pod重启了多少次有多少job在运行中。 ●cadvisor用来监控容器内部使用资源的信息比如 CPU、内存、网络I/O、磁盘I/O。 ●blackbox-exporter监控业务容器存活性。 3Service Discovery服务发现Prometheus支持多种服务发现机制文件DNSConsulKubernetesOpenStackEC2等等。 基于服务发现的过程并不复杂通过第三方提供的接口Prometheus查询到需要监控的Target列表然后轮训这些Target获取监控数据。 4Alertmanager是一个独立的告警模块从 Prometheus server 端接收到 alerts 后会进行去重、分组 并路由到相应的接收方发出报警常见的接收方式有电子邮件微信钉钉等。 5Pushgateway类似一个中转站Prometheus 的 server 端只会使用 pull 方式拉取数据但是某些节点因为某些原因只能使用 push 方式推送数据那么它就是用来接收 push 而来的数据并暴露给 Prometheus 的 server 拉取的中转站。 可以理解成目标主机可以上报短期任务的数据到 Pushgateway然后 Prometheus server 统一从 Pushgateway 拉取数据。 6Grafana是一个跨平台的开源的度量分析和可视化工具可以将采集的数据可视化的展示并及时通知给告警接收方。其官方库中具有丰富的仪表盘插件。 //Prometheus 工作流程 1Prometheus 以 Prometheus Server 为核心用于收集和存储时间序列数据。Prometheus Server 从监控目标中通过 pull 方式拉取指标数据或通过 pushgateway 把采集的数据拉取到 Prometheus server 中。 2Prometheus server 把采集到的监控指标数据通过 TSDB 存储到本地 HDD/SSD 中。 3Prometheus 采集的监控指标数据按时间序列存储通过配置报警规则把触发的报警发送到 Alertmanager。 4Alertmanager 通过配置报警接收方发送报警到邮件微信或者钉钉等。 5Prometheus 自带的 Web UI 界面提供 PromQL 查询语言可查询监控数据。 6Grafana 可接入 Prometheus 数据源把监控数据以图形化形式展示出。 Prometheus 官网地址https://prometheus.io Prometheus github 地址https://github.com/prometheus ------------------- Kubernetes 集群部署 Prometheus 和 Grafana ------------------- //实验环境 控制节点/master01        192.168.80.10 工作节点/node01            192.168.80.11 工作节点/node02            192.168.80.12 //node-exporter 安装 #创建监控 namespace kubectl create ns monitor-sa #部署 node-exporter mkdir /opt/prometheus cd /opt/prometheus/ vim node-export.yaml --- apiVersion: apps/v1 kind: DaemonSet                #可以保证 k8s 集群的每个节点都运行完全一样的 pod metadata:   name: node-exporter   namespace: monitor-sa   labels:     name: node-exporter spec:   selector:     matchLabels:      name: node-exporter   template:     metadata:       labels:         name: node-exporter     spec:       hostPID: true       hostIPC: true       hostNetwork: true       containers:       - name: node-exporter         image: prom/node-exporter:v0.16.0         ports:         - containerPort: 9100         resources:           requests:             cpu: 0.15        #这个容器运行至少需要0.15核cpu         securityContext:           privileged: true    #开启特权模式         args:         - --path.procfs         - /host/proc         - --path.sysfs         - /host/sys         - --collector.filesystem.ignored-mount-points         - ^/(sys|proc|dev|host|etc)($|/)         volumeMounts:         - name: dev           mountPath: /host/dev         - name: proc           mountPath: /host/proc         - name: sys           mountPath: /host/sys         - name: rootfs           mountPath: /rootfs       tolerations:       - key: node-role.kubernetes.io/master         operator: Exists         effect: NoSchedule       volumes:         - name: proc           hostPath:             path: /proc         - name: dev           hostPath:             path: /dev         - name: sys           hostPath:             path: /sys         - name: rootfs           hostPath:             path: / #hostNetwork、hostIPC、hostPID都为True时表示这个Pod里的所有容器会直接使用宿主机的网络直接与宿主机进行IPC进程间通信通信可以看到宿主机里正在运行的所有进程。加入了hostNetwork:true会直接将我们的宿主机的9100端口映射出来从而不需要创建service在我们的宿主机上就会有一个9100的端口。 kubectl apply -f node-export.yaml kubectl get pods -n monitor-sa -o wide #通过 node-exporter 采集数据 node-exporter 默认的监听端口是 9100可以执行 curl http://主机ip:9100/metrics 获取到主机的所有监控数据 curl -Ls http://192.168.80.10:9100/metrics | grep node_cpu_seconds # HELP node_cpu_seconds_total Seconds the cpus spent in each mode.        #Help 用于解释当前指标的含义 # TYPE node_cpu_seconds_total counter                #Type 用于说明数据的类型这是一个 counter计数器类型的数据 node_cpu_seconds_total{cpu0,modeidle} 1076.15        #接下来就是具体的指标的值 node_cpu_seconds_total{cpu0,modeiowait} 0.99 node_cpu_seconds_total{cpu0,modeirq} 0 node_cpu_seconds_total{cpu0,modenice} 0 node_cpu_seconds_total{cpu0,modesoftirq} 3.15 node_cpu_seconds_total{cpu0,modesteal} 0 node_cpu_seconds_total{cpu0,modesystem} 23.17 node_cpu_seconds_total{cpu0,modeuser} 24.49 node_cpu_seconds_total{cpu1,modeidle} 1079.71 node_cpu_seconds_total{cpu1,modeiowait} 0.75 node_cpu_seconds_total{cpu1,modeirq} 0 node_cpu_seconds_total{cpu1,modenice} 0 node_cpu_seconds_total{cpu1,modesoftirq} 3.6 node_cpu_seconds_total{cpu1,modesteal} 0 node_cpu_seconds_total{cpu1,modesystem} 22.04 node_cpu_seconds_total{cpu1,modeuser} 25.6 curl -Ls http://192.168.80.10:9100/metrics | grep node_load # HELP node_load1 1m load average. # TYPE node_load1 gauge node_load1 0.24 # HELP node_load15 15m load average. # TYPE node_load15 gauge node_load15 0.16 # HELP node_load5 5m load average. # TYPE node_load5 gauge node_load5 0.18 //Prometheus 安装和配置 1创建 sa 账号对 sa 做 rbac 授权 #创建一个 sa 账号 monitor kubectl create serviceaccount monitor -n monitor-sa #把 sa 账号 monitor 通过 clusterrolebing 绑定到 clusterrole 上 kubectl create clusterrolebinding monitor-clusterrolebinding -n monitor-sa --clusterrolecluster-admin  --serviceaccountmonitor-sa:monitor 2创建一个 configmap 存储卷用来存放 prometheus 配置信息 vim prometheus-cfg.yaml --- kind: ConfigMap apiVersion: v1 metadata:   labels:     app: prometheus   name: prometheus-config   namespace: monitor-sa data:   prometheus.yml: |     global:                     #指定prometheus的全局配置比如采集间隔抓取超时时间等       scrape_interval: 15s      #采集目标主机监控数据的时间间隔默认为1m       scrape_timeout: 10s       #数据采集超时时间默认10s       evaluation_interval: 1m     #触发告警生成alert的时间间隔默认是1m     scrape_configs:             #配置数据源称为target每个target用job_name命名。又分为静态配置和服务发现     - job_name: kubernetes-node       kubernetes_sd_configs:    # *_sd_configs 指定的是k8s的服务发现       - role: node              #使用node角色它使用默认的kubelet提供的http端口来发现集群中每个node节点       relabel_configs:            #重新标记       - source_labels: [__address__]    #配置的原始标签匹配地址         regex: (.*):10250             #匹配带有10250端口的url         replacement: ${1}:9100        #把匹配到的ip:10250的ip保留         target_label: __address__       #新生成的url是${1}获取到的ip:9100         action: replace         #动作替换       - action: labelmap         regex: __meta_kubernetes_node_label_(.)    #匹配到下面正则表达式的标签会被保留,如果不做regex正则的话默认只是会显示instance标签     - job_name: kubernetes-node-cadvisor    #抓取cAdvisor数据是获取kubelet上/metrics/cadvisor接口数据来获取容器的资源使用情况       kubernetes_sd_configs:       - role:  node       scheme: https       tls_config:         ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt       bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token       relabel_configs:       - action: labelmap    #把匹配到的标签保留         regex: __meta_kubernetes_node_label_(.)    #保留匹配到的具有__meta_kubernetes_node_label的标签       - target_label: __address__                   #获取到的地址__address__192.168.80.20:10250         replacement: kubernetes.default.svc:443     #把获取到的地址替换成新的地址kubernetes.default.svc:443       - source_labels: [__meta_kubernetes_node_name]         regex: (.)                                 #把原始标签中__meta_kubernetes_node_name值匹配到         target_label: __metrics_path__              #获取__metrics_path__对应的值         replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor             #把metrics替换成新的值api/v1/nodes/k8s-master1/proxy/metrics/cadvisor         #${1}是__meta_kubernetes_node_name获取到的值         #新的url就是https://kubernetes.default.svc:443/api/v1/nodes/k8s-master1/proxy/metrics/cadvisor     - job_name: kubernetes-apiserver       kubernetes_sd_configs:       - role: endpoints                             #使用k8s中的endpoint服务发现采集apiserver 6443端口获取到的数据       scheme: https       tls_config:         ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt       bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token       relabel_configs:       - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]    #[endpoint这个对象的名称空间,endpoint对象的服务名,exnpoint的端口名称]         action: keep    #采集满足条件的实例其他实例不采集         regex: default;kubernetes;https    #正则匹配到的默认空间下的service名字是kubernetes协议是https的endpoint类型保留下来     - job_name: kubernetes-service-endpoints       kubernetes_sd_configs:       - role: endpoints       relabel_configs:       - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]         action: keep         regex: true         #重新打标仅抓取到的具有prometheus.io/scrape: true的annotation的端点 意思是说如果某个service具有prometheus.io/scrape true的annotation声明则抓取annotation本身也是键值结构 所以这里的源标签设置为键而regex设置值true当值匹配到regex设定的内容时则执行keep动作也就是保留其余则丢弃。       - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]         action: replace         target_label: __scheme__         regex: (https?)         #重新设置scheme匹配源标签__meta_kubernetes_service_annotation_prometheus_io_scheme也就是prometheus.io/scheme annotation如果源标签的值匹配到regex则把值替换为__scheme__对应的值。       - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]         action: replace         target_label: __metrics_path__         regex: (.)         #应用中自定义暴露的指标也许你暴露的API接口不是/metrics这个路径那么你可以在这个POD对应的service中做一个 prometheus.io/path /mymetrics 声明上面的意思就是把你声明的这个路径赋值给__metrics_path__ 其实就是让prometheus来获取自定义应用暴露的metrices的具体路径 不过这里写的要和service中做好约定如果service中这样写 prometheus.io/app-metrics-path: /metrics 那么你这里就要__meta_kubernetes_service_annotation_prometheus_io_app_metrics_path这样写。       - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]         action: replace         target_label: __address__         regex: ([^:])(?::\d)?;(\d)         replacement: $1:$2         #暴露自定义的应用的端口就是把地址和你在service中定义的 prometheus.io/port port 声明做一个拼接 然后赋值给__address__这样prometheus就能获取自定义应用的端口然后通过这个端口再结合__metrics_path__来获取指标如果__metrics_path__值不是默认的/metrics那么就要使用上面的标签替换来获取真正暴露的具体路径。       - action: labelmap        #保留下面匹配到的标签         regex: __meta_kubernetes_service_label_(.)       - source_labels: [__meta_kubernetes_namespace]         action: replace        #替换__meta_kubernetes_namespace变成kubernetes_namespace         target_label: kubernetes_namespace       - source_labels: [__meta_kubernetes_service_name]         action: replace         target_label: kubernetes_name kubectl apply -f prometheus-cfg.yaml 3通过 deployment 部署 prometheus #将 prometheus 调度到 node1 节点在 node1 节点创建 prometheus 数据存储目录 mkdir /data chmod 777 /data #通过 deployment 部署 prometheus vim prometheus-deploy.yaml --- apiVersion: apps/v1 kind: Deployment metadata:   name: prometheus-server   namespace: monitor-sa   labels:     app: prometheus spec:   replicas: 1   selector:     matchLabels:       app: prometheus       component: server     #matchExpressions:     #- {key: app, operator: In, values: [prometheus]}     #- {key: component, operator: In, values: [server]}   template:     metadata:       labels:         app: prometheus         component: server       annotations:         prometheus.io/scrape: false     spec:       nodeName: node01              #指定pod调度到哪个节点上           serviceAccountName: monitor       containers:       - name: prometheus         image: prom/prometheus:v2.2.1         imagePullPolicy: IfNotPresent         command:           - prometheus           - --config.file/etc/prometheus/prometheus.yml           - --storage.tsdb.path/prometheus        #数据存储目录           - --storage.tsdb.retention720h          #数据保存时长           - --web.enable-lifecycle                 #开启热加载         ports:         - containerPort: 9090           protocol: TCP         volumeMounts:         - mountPath: /etc/prometheus/prometheus.yml           name: prometheus-config           subPath: prometheus.yml         - mountPath: /prometheus/           name: prometheus-storage-volume       volumes:         - name: prometheus-config           configMap:             name: prometheus-config             items:               - key: prometheus.yml                 path: prometheus.yml                 mode: 0644         - name: prometheus-storage-volume           hostPath:            path: /data            type: Directory kubectl apply -f prometheus-deploy.yaml kubectl get pods -o wide -n monitor-sa  4给 prometheus pod 创建一个 service vim prometheus-svc.yaml --- apiVersion: v1 kind: Service metadata:   name: prometheus   namespace: monitor-sa   labels:     app: prometheus spec:   type: NodePort   ports:     - port: 9090       targetPort: 9090       protocol: TCP       nodePort: 31000   selector:     app: prometheus     component: server kubectl apply -f prometheus-svc.yaml kubectl get svc -n monitor-sa NAME         TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE prometheus   NodePort   10.107.188.51   none        9090:31000/TCP   86s #通过上面可以看到 service 在 node 节点上映射的端口是 31000这样我们访问 k8s 集群的 node 节点的 ip:31000就可以访问到 prometheus 的 web ui 界面了。 浏览器访问 http://192.168.80.11:31000 #点击页面的Status-Targets如看到所有 Target 状态都为 UP说明我们配置的服务发现可以正常采集数据 #查询 K8S 集群中一分钟之内每个 Pod 的 CPU 使用率 sum by (name)( rate(container_cpu_usage_seconds_total{image!, name!}[1m] ) ) //Prometheus 配置热加载 ###为了每次修改配置文件可以热加载prometheus也就是不停止prometheus就可以使配置生效想要使配置生效可用如下热加载命令 kubectl get pods -n monitor-sa -o wide -l appprometheus NAME                                 READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES prometheus-server-75fb7f8fc6-8vxwj   1/1     Running   0          18h   10.244.1.3   node01   none           none #想要使配置生效可用如下命令热加载 curl -X POST -Ls http://10.244.1.3:9090/-/reload  #查看 log kubectl logs -n monitor-sa prometheus-server-75fb7f8fc6-8vxwj | grep Loading configuration file  ###一般热加载速度比较慢可以暴力重启prometheus如修改上面的 prometheus-cfg.yaml 文件之后可用如下命令 #可执行先强制删除然后再通过 apply 更新 kubectl delete -f prometheus-cfg.yaml kubectl delete -f prometheus-deploy.yaml kubectl apply -f prometheus-cfg.yaml kubectl apply -f prometheus-deploy.yaml 注意线上环境最好使用热加载暴力删除可能造成监控数据的丢失 //Grafana 安装 vim grafana.yaml --- apiVersion: apps/v1 kind: Deployment metadata:   name: monitoring-grafana   namespace: kube-system spec:   replicas: 1   selector:     matchLabels:       task: monitoring       k8s-app: grafana   template:     metadata:       labels:         task: monitoring         k8s-app: grafana     spec:       containers:       - name: grafana         image: grafana/grafana:5.0.4         ports:         - containerPort: 3000           protocol: TCP         volumeMounts:         - mountPath: /etc/ssl/certs           name: ca-certificates           readOnly: true         - mountPath: /var           name: grafana-storage         env:         - name: INFLUXDB_HOST           value: monitoring-influxdb         - name: GF_SERVER_HTTP_PORT           value: 3000           # The following env variables are required to make Grafana accessible via           # the kubernetes api-server proxy. On production clusters, we recommend           # removing these env variables, setup auth for grafana, and expose the grafana           # service using a LoadBalancer or a public IP.         - name: GF_AUTH_BASIC_ENABLED           value: false         - name: GF_AUTH_ANONYMOUS_ENABLED           value: true         - name: GF_AUTH_ANONYMOUS_ORG_ROLE           value: Admin         - name: GF_SERVER_ROOT_URL           # If youre only using the API Server proxy, set this value instead:           # value: /api/v1/namespaces/kube-system/services/monitoring-grafana/proxy           value: /       volumes:       - name: ca-certificates         hostPath:           path: /etc/ssl/certs       - name: grafana-storage         emptyDir: {} --- apiVersion: v1 kind: Service metadata:   labels:     # For use as a Cluster add-on (https://github.com/kubernetes/kubernetes/tree/master/cluster/addons)     # If you are NOT using this as an addon, you should comment out this line.     kubernetes.io/cluster-service: true     kubernetes.io/name: monitoring-grafana   name: monitoring-grafana   namespace: kube-system spec:   # In a production setup, we recommend accessing Grafana through an external Loadbalancer   # or through a public IP.   # type: LoadBalancer   # You could also use NodePort to expose the service at a randomly-generated port   # type: NodePort   ports:   - port: 80     targetPort: 3000   selector:     k8s-app: grafana   type: NodePort kubectl apply -f grafana.yaml kubectl get pods -n kube-system -l taskmonitoring -o wide kubectl get svc -n kube-system | grep grafana   monitoring-grafana   NodePort    10.96.53.95   none        80:32087/TCP             26s  //Grafana 配置  1浏览器访问http://192.168.80.11:32087 登陆 grafana 2开始配置 grafana 的 web 界面选择 Add data source 【Name】设置成 Prometheus 【Type】选择  Prometheus 【URL】设置成 http://prometheus.monitor-sa.svc:9090        #使用service的集群内部端口配置服务端地址 点击 【Save Test】 3导入监控模板 官方链接搜索https://grafana.com/dashboards?dataSourceprometheussearchkubernetes 4监控 node 状态 点击左侧号选择【Import】 点击【Upload .json File】导入 node_exporter.json 模板 【Prometheus】选择 Prometheus 点击【Import】 5监控 容器 状态 点击左侧号选择【Import】 点击【Upload .json File】导入 docker_rev1.json 模板 【Prometheus】选择 Prometheus 点击【Import】 //k8s 部署 kube-state-metrics 组件 1安装 kube-state-metrics 组件 #创建 sa并对 sa 授权 vim kube-state-metrics-rbac.yaml  --- apiVersion: v1 kind: ServiceAccount metadata:   name: kube-state-metrics   namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata:   name: kube-state-metrics rules: - apiGroups: []   resources: [nodes, pods, services, resourcequotas, replicationcontrollers, limitranges, persistentvolumeclaims, persistentvolumes, namespaces, endpoints]   verbs: [list, watch] - apiGroups: [extensions]   resources: [daemonsets, deployments, replicasets]   verbs: [list, watch] - apiGroups: [apps]   resources: [statefulsets]   verbs: [list, watch] - apiGroups: [batch]   resources: [cronjobs, jobs]   verbs: [list, watch] - apiGroups: [autoscaling]   resources: [horizontalpodautoscalers]   verbs: [list, watch] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata:   name: kube-state-metrics roleRef:   apiGroup: rbac.authorization.k8s.io   kind: ClusterRole   name: kube-state-metrics subjects: - kind: ServiceAccount   name: kube-state-metrics   namespace: kube-system kubectl apply -f kube-state-metrics-rbac.yaml #安装 kube-state-metrics 组件和 service vim kube-state-metrics-deploy.yaml  --- apiVersion: apps/v1 kind: Deployment metadata:   name: kube-state-metrics   namespace: kube-system spec:   replicas: 1   selector:     matchLabels:       app: kube-state-metrics   template:     metadata:       labels:         app: kube-state-metrics     spec:       serviceAccountName: kube-state-metrics       containers:       - name: kube-state-metrics         image: quay.io/coreos/kube-state-metrics:v1.9.0         ports:         - containerPort: 8080 --- apiVersion: v1 kind: Service metadata:   annotations:     prometheus.io/scrape: true   name: kube-state-metrics   namespace: kube-system   labels:     app: kube-state-metrics spec:   ports:   - name: kube-state-metrics     port: 8080     protocol: TCP   selector:     app: kube-state-metrics kubectl apply -f kube-state-metrics-deploy_svc.yaml kubectl get pods,svc -n kube-system -l appkube-state-metrics 2Grafana 配置 #监控 k8s 群集状态 点击左侧号选择【Import】 点击【Upload .json File】导入 kubernetes-cluster-prometheus_rev4.json 模板 【Prometheus】选择 Prometheus 点击【Import】 #监控 k8s 群集性能状态 点击左侧号选择【Import】 点击【Upload .json File】导入 kubernetes-cluster-monitoring-via-prometheus_rev3.json 模板 【Prometheus】选择 Prometheus 点击【Import】 ------------------- kubernetes 配置 alertmanager 发送报警到邮箱 ------------------- //Prometheus报警处理流程 1Prometheus Server 监控目标主机上暴露的 http接口假设接口A通过Promethes配置的scrape_interval 定义的时间间隔 定期采集目标主机上监控数据。 2当接口A不可用的时候Server 端会持续的尝试从接口中取数据直到 scrape_timeout 时间后停止尝试。 这时候把接口的状态变为 DOWN。 3Prometheus 同时根据配置的 evaluation_interval 的时间间隔定期默认1min的对 Alert Rule 进行评估 当到达评估周期的时候发现接口A为 DOWN即 UP0 为真激活 Alert进入 PENDING 状态并记录当前 active 的时间 4当下一个 alert rule 的评估周期到来的时候发现 UP0 继续为真然后判断警报 Active 的时间是否已经超出 rule 里的 for 持续时间如果未超出则进入下一个评估周期如果时间超出则 alert 的状态变为 FIRING同时调用 Alertmanager 接口 发送相关报警数据。 5AlertManager 收到报警数据后会将警报信息进行分组然后根据 alertmanager 配置的 group_wait 时间先进行等待。等 wait 时间过后再发送报警信息。 6属于同一个 Alert Group的警报在等待的过程中可能进入新的 alert如果之前的报警已经成功发出那么间隔 group_interval 的时间间隔后再重新发送报警信息。比如配置的是邮件报警那么同属一个 group 的报警信息会汇总在一个邮件里进行发送。 7如果 Alert Group里的警报一直没发生变化并且已经成功发送等待 repeat_interval 时间间隔之后再重复发送相同的报警邮件 如果之前的警报没有成功发送则相当于触发第6条条件则需要等待 group_interval 时间间隔后重复发送。 8同时最后至于警报信息具体发给谁满足什么样的条件下指定警报接收人设置不同报警发送频率这里使用 alertmanager 的 route 路由规则进行配置。 //Prometheus 及 Alertmanager 配置 1创建 alertmanager 配置文件 vim alertmanager-cm.yaml --- kind: ConfigMap apiVersion: v1 metadata:   name: alertmanager   namespace: monitor-sa data:   alertmanager.yml: |-     global:                    #设置发件人邮箱信息       resolve_timeout: 1m       smtp_smarthost: smtp.qq.com:25       smtp_from: qwe4546456qq.com       smtp_auth_username: qwe4546456qq.com       smtp_auth_password: zzkqqtejcbenbidh    #此处为授权码登录QQ邮箱【设置】-【账户】中的【生成授权码】获取       smtp_require_tls: false     route:                        #用于设置告警的分发策略       group_by: [alertname]         #采用哪个标签来作为分组依据       group_wait: 10s               #组告警等待时间。也就是告警产生后等待10s如果有同组告警一起发出       group_interval: 10s           #上下两组发送告警的间隔时间       repeat_interval: 10m          #重复发送告警的时间减少相同邮件的发送频率默认是1h       receiver: default-receiver    #定义谁来收告警     receivers:                    #设置收件人邮箱信息     - name: default-receiver       email_configs:       - to: qwe4546456wo.cn    #设置收件人邮箱地址         send_resolved: true kubectl apply -f alertmanager-cm.yaml 2创建 prometheus 和告警规则配置文件 #上传 prometheus-alertmanager-cfg.yaml 文件 #删除之前的配置更新配置 kubectl delete -f prometheus-cfg.yaml kubectl apply -f prometheus-alertmanager-cfg.yaml kubectl get cm -n monitor-sa  alertmanager        1      2m29s kube-root-ca.crt    1      14h prometheus-config   2      29s 3安装 prometheus 和 alertmanager #生成一个 secret 资源 etcd-certs这个在部署 prometheus 需要用于监控 etcd 相关资源 kubectl -n monitor-sa create secret generic etcd-certs --from-file/etc/kubernetes/pki/etcd/server.key  --from-file/etc/kubernetes/pki/etcd/server.crt --from-file/etc/kubernetes/pki/etcd/ca.crt #更新资源清单 yaml 文件安装 prometheus 和 alertmanager vim prometheus-alertmanager-deploy.yaml --- apiVersion: apps/v1 kind: Deployment metadata:   name: prometheus-server   namespace: monitor-sa   labels:     app: prometheus spec:   replicas: 1   selector:     matchLabels:       app: prometheus       component: server     #matchExpressions:     #- {key: app, operator: In, values: [prometheus]}     #- {key: component, operator: In, values: [server]}   template:     metadata:       labels:         app: prometheus         component: server       annotations:         prometheus.io/scrape: false     spec:       nodeName: node01       serviceAccountName: monitor       containers:       - name: prometheus         image: prom/prometheus:v2.2.1         imagePullPolicy: IfNotPresent         command:         - /bin/prometheus         args:         - --config.file/etc/prometheus/prometheus.yml         - --storage.tsdb.path/prometheus         - --storage.tsdb.retention24h         - --web.enable-lifecycle         ports:         - containerPort: 9090           protocol: TCP         volumeMounts:         - mountPath: /etc/prometheus           name: prometheus-config         - mountPath: /prometheus/           name: prometheus-storage-volume         - name: k8s-certs           mountPath: /var/run/secrets/kubernetes.io/k8s-certs/etcd/         - name: localtime           mountPath: /etc/localtime       - name: alertmanager         image: prom/alertmanager:v0.14.0         imagePullPolicy: IfNotPresent         args:         - --config.file/etc/alertmanager/alertmanager.yml         - --log.leveldebug         ports:         - containerPort: 9093           protocol: TCP           name: alertmanager         volumeMounts:         - name: alertmanager-config           mountPath: /etc/alertmanager         - name: alertmanager-storage           mountPath: /alertmanager         - name: localtime           mountPath: /etc/localtime       volumes:         - name: prometheus-config           configMap:             name: prometheus-config         - name: prometheus-storage-volume           hostPath:            path: /data            type: Directory         - name: k8s-certs           secret:            secretName: etcd-certs         - name: alertmanager-config           configMap:             name: alertmanager         - name: alertmanager-storage           hostPath:            path: /data/alertmanager            type: DirectoryOrCreate         - name: localtime           hostPath:            path: /usr/share/zoneinfo/Asia/Shanghai kubectl delete -f prometheus-deploy.yaml kubectl apply -f prometheus-alertmanager-deploy.yaml kubectl get pods -n monitor-sa | grep prometheus 4部署 alertmanager 的 service方便在浏览器访问 vim alertmanager-svc.yaml --- apiVersion: v1 kind: Service metadata:   labels:     name: prometheus     kubernetes.io/cluster-service: true   name: alertmanager   namespace: monitor-sa spec:   ports:   - name: alertmanager     nodePort: 30066     port: 9093     protocol: TCP     targetPort: 9093   selector:     app: prometheus   sessionAffinity: None   type: NodePort kubectl apply -f alertmanager-svc.yaml #查看 service 在物理机映射的端口 kubectl get svc -n monitor-sa NAME           TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE alertmanager   NodePort   10.105.125.219   none        9093:30066/TCP   38s prometheus     NodePort   10.107.188.51    none        9090:31000/TCP   23h #此时可以看到 prometheus 的 service 在物理机映射的端口是 31000alertmanager 的 service 在物理机映射的端口是 30066 浏览器访问 http://192.168.80.11:30066/#/alerts 登陆 alertmanager 查看接收到的邮件报警可以发现与 alertmanager 显示的告警一致 浏览器访问 http://192.168.80.11:31000 点击页面的 Status-Targets查看 prometheus 的 targets //处理 kube-proxy 监控告警 kubectl edit configmap kube-proxy -n kube-system ...... metricsBindAddress: 0.0.0.0:10249 #因为 kube-proxy 默认端口10249是监听在 127.0.0.1 上的需要改成监听到物理节点上 #重新启动 kube-proxy kubectl get pods -n kube-system | grep kube-proxy |awk {print $1} | xargs kubectl delete pods -n kube-system ss  -antulp |grep :10249 tcp    LISTEN     0      128      :::10249                :::*                   users:((kube-proxy,pid55675,fd15)) #alert 查看 点击 prometheus 页面的 Alerts点开一个告警项FIRING 表示 prometheus 已经将告警发给 alertmanager在 Alertmanager 中可以看到有一个 alert。登录到 浏览器访问 http://192.168.80.11:30066/#/alerts 登陆 alertmanager 即可看到。
http://www.zqtcl.cn/news/565132/

相关文章:

  • 使用angularjs的网站域名怎么解析到服务器
  • 地方门户网站盈利模式宝塔 wordpress
  • 西安网站备案软件开发基础教程
  • 有服务器做网站软件系统开发怎样容易
  • 网站建设的公司有发展吗织梦婚纱网站模板
  • 淘宝销售书网站建设方案wordpress调用评论数据
  • 搭建网站需要什么软件苏州吴中区建设局工程网站
  • 长沙市网站推广公司wordpress 弹窗登录插件
  • 网站策划怎么做内容朔州网站建设公司
  • 宁波拾谷网站建设蚌埠网站建设中心
  • 青岛专业设计网站公司加拿大广播公司
  • 盘锦市建设局网站地址八桂职教网技能大赛
  • 投资建设一个网站多少钱和淘宝同时做电商的网站
  • 做动物网站的素材icp备案 网站备案
  • 找人建网站唐山网络运营推广
  • 福建省住房建设厅网站6网站简历模板
  • 医疗网站模版杭州工商注册
  • 正保建设工程网站logo创意
  • 简洁个人博客网站模板下载用自己电脑做网站服务器-phpstudy+花生壳
  • 网页模板下载哪个网站好多个域名指定同一个网站好处
  • 北京网站建设有哪些公司微网站的案例
  • 常德经开区网站官网域名备案关闭网站吗
  • 做宠物网站的工作室做网站租服务器
  • 2017做那个网站致富网站换源码如何保留以前的文章
  • php网站开发实例教程书wordpress博客页面显示文章在哪
  • 地方o2o同城网站源码微信app开发价格表
  • 花木公司网站源码双语外贸网站源码
  • 什么公司做网站会提供源代码创业做招商加盟类网站赚钱
  • 东莞网站建设排名基因数据库网站开发价格
  • 天河区营销型网站建设科技自立自强