Giám sát với Prometheus
Nó là một hệ thống giám sát và cảnh báo. Nó được xây dựng tại SoundCloud và có nguồn mở vào năm 2012. Nó xử lý dữ liệu đa chiều rất tốt.
Prometheus có nhiều thành phần tham gia giám sát –
- Prometheus – Đây là thành phần cốt lõi có chức năng quét và lưu trữ dữ liệu.
- Khám phá nút Prometheus – Nhận ma trận cấp máy chủ và hiển thị chúng với Prometheus.
- Ranch-eye – là một haproxy và hiển thị các số liệu thống kê của Cvisor cho Prometheus.
- Grafana – Trực quan hóa dữ liệu.
- InfuxDB – Cơ sở dữ liệu chuỗi thời gian được sử dụng đặc biệt để lưu trữ dữ liệu từ chủ trang trại.
- Prom-ranch-exportorter – Đây là một ứng dụng node.js đơn giản, giúp truy vấn máy chủ Rancher về trạng thái của ngăn xếp dịch vụ.
Sematext Docker Agent
Nó là một đại lý thu thập nhật ký, sự kiện và chỉ số nhận biết Docker hiện đại. Nó chạy như một vùng chứa nhỏ trên mọi máy chủ Docker và thu thập nhật ký, số liệu và sự kiện cho tất cả các nút và vùng chứa cụm. Nó phát hiện ra tất cả các vùng chứa (một nhóm có thể chứa nhiều vùng chứa) bao gồm các vùng chứa cho các dịch vụ cốt lõi của Kubernetes, nếu các dịch vụ cốt lõi được triển khai trong các vùng chứa Docker. Sau khi triển khai, tất cả nhật ký và chỉ số sẽ có sẵn ngay lập tức.
Triển khai đại lý cho các nút
Kubernetes cung cấp DeamonSets đảm bảo các nhóm được thêm vào cụm.
Định cấu hình SemaText Docker Agent
Nó được cấu hình thông qua các biến môi trường.
- Nhận một tài khoản miễn phí tại apps.sematext.com , nếu bạn chưa có.
- Tạo Ứng dụng SPM loại “Docker” để nhận Mã thông báo ứng dụng SPM. Ứng dụng SPM sẽ lưu trữ sự kiện và số liệu hiệu suất Kubernetes của bạn.
- Tạo Ứng dụng Logsene để nhận Mã thông báo ứng dụng Logsene. Ứng dụng Logsene sẽ lưu giữ nhật ký Kubernetes của bạn.
- Chỉnh sửa giá trị của LOGSENE_TOKEN và SPM_TOKEN trong định nghĩa DaemonSet như hình dưới đây.
- Lấy mẫu sematext-agent-daemonset.yml (văn bản thô thô) mới nhất (cũng được hiển thị bên dưới).
- Lưu trữ nó ở đâu đó trên đĩa.
- Thay thế các trình giữ chỗ SPM_TOKEN và LOGSENE_TOKEN bằng các mã thông báo SPM và Logsene App của bạn.
Tạo đối tượng DaemonSet
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
Chạy Sematext Agent Docker với kubectl
$ kubectl create -f sematext-agent-daemonset.yml
daemonset "sematext-agent-daemonset" created
Nhật ký Kubernetes
Nhật ký của vùng chứa Kubernetes không khác nhiều so với nhật ký vùng chứa Docker. Tuy nhiên, người dùng Kubernetes cần xem nhật ký cho các nhóm được triển khai. Do đó, sẽ rất hữu ích nếu có sẵn thông tin cụ thể về Kubernetes để tìm kiếm nhật ký, chẳng hạn như –
- Không gian tên Kubernetes
- Tên nhóm Kubernetes
- Tên vùng chứa Kubernetes
- Tên hình ảnh Docker
- Kubernetes UID
Sử dụng ELK Stack và LogSpout
Ngăn xếp ELK bao gồm Elasticsearch, Logstash và Kibana. Để thu thập và chuyển tiếp nhật ký đến nền tảng ghi nhật ký, chúng tôi sẽ sử dụng LogSpout (mặc dù có các tùy chọn khác như FluentD). Đoạn mã sau đây cho thấy cách thiết lập cụm ELK trên Kubernetes và tạo dịch vụ cho 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
Tạo bộ điều khiển sao chép
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: {}
URL Kibana
Đối với Kibana, chúng tôi cung cấp URL Elasticsearch dưới dạng biến môi trường.
- name: KIBANA_ES_URL
value: "http://elasticsearch.elk.svc.cluster.local:9200"
- name: KUBERNETES_TRUST_CERT
value: "true"
Giao diện người dùng Kibana sẽ có thể truy cập được tại cổng container 5601 và kết hợp cổng máy chủ / cổng tương ứng. Khi bạn bắt đầu, sẽ không có bất kỳ dữ liệu nào trong Kibana (dự kiến là bạn chưa đẩy bất kỳ dữ liệu nào).