📅  最后修改于: 2020-11-01 04:18:41             🧑  作者: Mango
监视是管理大型集群的关键组件之一。为此,我们有许多工具。
这是一个监视和警报系统。它建立在SoundCloud上,于2012年开源。它可以很好地处理多维数据。
Prometheus有多个组件可以参与监视-
Prometheus-它是抓取和存储数据的核心组件。
Prometheus节点浏览-获取主机级别矩阵,并将其公开给Prometheus。
牧场眼睛-是haproxy ,并向Prometheus展示cAdvisor的统计数据。
Grafana-数据可视化。
InfuxDB-时间序列数据库,专门用于存储牧场主的数据。
Prom-ranch-exporter-这是一个简单的node.js应用程序,可帮助查询Rancher服务器的服务堆栈状态。
它是现代的Docker感知指标,事件和日志收集代理。它作为每个Docker主机上的微型容器运行,并收集所有集群节点和容器的日志,指标和事件。如果核心服务部署在Docker容器中,它将发现所有容器(一个容器可能包含多个容器),包括用于Kubernetes核心服务的容器。部署后,所有日志和指标均可立即使用。
Kubernetes提供了DeamonSets,以确保将Pod添加到集群中。
通过环境变量进行配置。
如果您还没有免费的帐户,请访问apps.sematext.com 。
创建类型为“ Docker”的SPM应用程序以获取SPM应用程序令牌。 SPM应用程序将保存您的Kubernetes性能指标和事件。
创建一个Logsene应用以获得Logsene应用令牌。 Logsene应用程序将保存您的Kubernetes日志。
如下所示,在DaemonSet定义中编辑LOGSENE_TOKEN和SPM_TOKEN的值。
抓住最新的sematext-agent-daemonset.yml(原始纯文本)模板(也如下所示)。
将其存储在磁盘上的某个位置。
将SPM_TOKEN和LOGSENE_TOKEN占位符替换为您的SPM和Logsene应用令牌。
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: sematext-agent
spec:
template:
metadata:
labels:
app: sematext-agent
spec:
selector: {}
dnsPolicy: "ClusterFirst"
restartPolicy: "Always"
containers:
- name: sematext-agent
image: sematext/sematext-agent-docker:latest
imagePullPolicy: "Always"
env:
- name: SPM_TOKEN
value: "REPLACE THIS WITH YOUR SPM TOKEN"
- name: LOGSENE_TOKEN
value: "REPLACE THIS WITH YOUR LOGSENE TOKEN"
- name: KUBERNETES
value: "1"
volumeMounts:
- mountPath: /var/run/docker.sock
name: docker-sock
- mountPath: /etc/localtime
name: localtime
volumes:
- name: docker-sock
hostPath:
path: /var/run/docker.sock
- name: localtime
hostPath:
path: /etc/localtime
$ kubectl create -f sematext-agent-daemonset.yml
daemonset "sematext-agent-daemonset" created
Kubernetes容器的日志与Docker容器日志没有太大区别。但是,Kubernetes用户需要查看已部署的Pod的日志。因此,将特定于Kubernetes的信息用于日志搜索非常有用,例如-
ELK堆栈包括Elasticsearch,Logstash和Kibana。为了收集日志并将日志转发到日志记录平台,我们将使用LogSpout(尽管还有其他选项,例如FluentD)。
以下代码显示了如何在Kubernetes上设置ELK集群并为ElasticSearch创建服务-
apiVersion: v1
kind: Service
metadata:
name: elasticsearch
namespace: elk
labels:
component: elasticsearch
spec:
type: LoadBalancer
selector:
component: elasticsearch
ports:
- name: http
port: 9200
protocol: TCP
- name: transport
port: 9300
protocol: TCP
apiVersion: v1
kind: ReplicationController
metadata:
name: es
namespace: elk
labels:
component: elasticsearch
spec:
replicas: 1
template:
metadata:
labels:
component: elasticsearch
spec:
serviceAccount: elasticsearch
containers:
- name: es
securityContext:
capabilities:
add:
- IPC_LOCK
image: quay.io/pires/docker-elasticsearch-kubernetes:1.7.1-4
env:
- name: KUBERNETES_CA_CERTIFICATE_FILE
value: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: "CLUSTER_NAME"
value: "myesdb"
- name: "DISCOVERY_SERVICE"
value: "elasticsearch"
- name: NODE_MASTER
value: "true"
- name: NODE_DATA
value: "true"
- name: HTTP_ENABLE
value: "true"
ports:
- containerPort: 9200
name: http
protocol: TCP
- containerPort: 9300
volumeMounts:
- mountPath: /data
name: storage
volumes:
- name: storage
emptyDir: {}
对于Kibana,我们提供Elasticsearch URL作为环境变量。
- name: KIBANA_ES_URL
value: "http://elasticsearch.elk.svc.cluster.local:9200"
- name: KUBERNETES_TRUST_CERT
value: "true"
将在容器端口5601和相应的主机/节点端口组合处访问Kibana UI。开始时,Kibana中将没有任何数据(因为您没有推送任何数据,所以可以预期)。