https://upload.jianshu.io/users/upload_avatars/9415503/6ac415b5-009a-4973-a794-ccade4c876b2.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/240/h/240

Prometheus告警集成到钉钉

集成到钉钉

编写python flask脚本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
cat > app.py <<EOF
#!/usr/bin/python
# -*- coding: utf8 -*-
from flask import Flask
from flask import request
import time
import hmac
import hashlib
import base64
import urllib
import requests
import json
import sys



reload(sys) 
sys.setdefaultencoding('utf-8')

app = Flask(__name__)
url = 'https://oapi.dingtalk.com/robot/send?access_token=859fe7562a332ec1d0a1b7385da590baa726a0b59c9311a68d7xxxxxxxxxx' 

def get_timestamp_sign():
    timestamp = long(round(time.time() * 1000))
    secret = 'SEC5d4464c3b48f46352d7d0ec92a1f7b674c11910axxxxxxx'
    secret_enc = bytes(secret).encode('utf-8')
    string_to_sign = '{}\n{}'.format(timestamp, secret)
    string_to_sign_enc = bytes(string_to_sign).encode('utf-8')
    hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
    sign = urllib.quote_plus(base64.b64encode(hmac_code))
    return {"timestamp": timestamp, "sign": sign}

def send_dingtalk(msg,url):
   data = {
        'msgtype': 'text',
        'text': {
            'content': '{}'.format(msg)
        },
        'at': {
            'atMobiles': []
            }
   }
   headers = {
        'Content-Type': 'application/json',
        'Charset': 'utf-8'
    }
   response = requests.post(url, headers=headers, data=json.dumps(data))

def get_dingtalk_content(data):
    parameter = get_timestamp_sign()
    dingtalk_url = url + '&timestamp=' + str(parameter['timestamp']) + '&sign=' + str(parameter['sign'])

    for item in data:
        if item['status'] == 'firing':
            warning_level = '告警级别:' + item['labels']['severity'] + '\n'
            warning_name = '告警标题:' + item['labels']['alertname'] + '\n'
            warning_start = '告警时间:' + item['startsAt'].split('.')[0].replace('T',' ') + '\n'
            warning_message = '告警详情:' +item['annotations']['message'] + '\n'
            msg = warning_name + warning_level + warning_start + warning_message
            send_dingtalk(msg,dingtalk_url)



@app.route('/',methods=['POST'])
def send():
    if request.method == 'POST':
        post_data = json.loads(request.get_data())
        print(post_data['alerts'])
        get_dingtalk_content(post_data['alerts'])
        return 'Hello'

if __name__ == '__main__':
  app.run(host='0.0.0.0',port=80)
EOF

制作dockerfile

1
2
3
4
5
6
7
8
9
cat > Dockerfile <<EOF
#FROM registry.szcasic.com/python/flask:2.7.17-alpine3.10
FROM registry.cn-shenzhen.aliyuncs.com/k8s-kubeadm/python2-flask:2.7.17-alpine3.10

WORKDIR /apps
COPY ./app.py /apps

CMD ["python","app.py"]
EOF

钉钉启动yaml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
cat > prometheus-webhook-dingtalk.yaml <<EOF
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: webhook-dingtalk
  name: webhook-dingtalk
  namespace: monitoring
  #需要和alertmanager在同一个namespace
spec:
  replicas: 1
  selector:
    matchLabels:
      app: webhook-dingtalk
  template:
    metadata:
      labels:
        app: webhook-dingtalk
    spec:
      containers:
      - image: registry.cn-shenzhen.aliyuncs.com/xxxxx/webhook-dingtalk:latest
        name: webhook-dingtalk
        # args:
        # - "https://oapi.dingtalk.com/robot/send?access_token=859fe7562a332ec1d0a1b7385da590baa726a0b5xxxxxxxx"
        #上面创建的钉钉机器人hook
        ports:
        - containerPort: 80
          protocol: TCP
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
          limits:
            cpu: 500m
            memory: 500Mi
        livenessProbe:
          failureThreshold: 3
          initialDelaySeconds: 30
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 1
          tcpSocket:
            port: 80
        readinessProbe:
          failureThreshold: 3
          initialDelaySeconds: 30
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 1
          httpGet:
            port: 80
            path: /
      imagePullSecrets:
        - name: IfNotPresent
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: webhook-dingtalk
  name: webhook-dingtalk
  namespace: monitoring
  #需要和alertmanager在同一个namespace
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: webhook-dingtalk
  type: ClusterIP
EOF

启动webhook

1
kubectl apply prometheus-webhook-dingtalk.yaml -n kube-system

Prometheus常用资源监控

容器监控

cAdvisor已经内置在了 kubelet 组件之中,所以不需要单独去安装,cAdvisor的数据路径为/api/v1/nodes//proxy/metrics,同样这里使用 node 的服务发现模式,因为每一个节点下面都有 kubelet,自然都有cAdvisor采集到的数据指标,配置如下:

Prometheus_arlertmanager使用说明

AlertManager 简介

Prometheus将数据采集和报警分成了两个模块。报警规则配置在Prometheus Servers上,然后发送报警信息到AlertManger,然后我们的AlertManager就来管理这些报警信息,包括silencing、inhibition,聚合报警信息过后通过email、PagerDuty、HipChat、Slack 等方式发送消息提示.

阿里云DTS数据同步实施

背景说明

基于线下IDC机房传统数据库需要和云上数据实现数据一致性需求,并实现数据库之间的实时增量同步功能,特此借助于阿里云的DTS数据同步服务来保证线下线上数据间的实时同步,并确保业务数据的一致性和完整性。

Shell编程实战案例

https://www.52xxzy.com/wp-content/uploads/2021/07/1627568141-1273d0b0f1efc73.jpg

shell编程实战案例

  • 监控一个机器存活状态
  • 监控一个端口存活
  • 找出使用cpu或者内存前十的进程
  • 监控内存使用率脚本
  • 监控硬盘io
  • 随机生成字符文件名
  • 多进程
1
2
3
4
5
6
7
8
# 监控脚本注意事项

明确监控项
阀值是多少
监控方法(命令,思路(运行方法,调用方法))
返回值是什么

根据监控平台选择监控方式:例如zabbix,zabbix-agent,snmp,prometheus

监控主机及联网状态

1、监控目的

广州一日游

https://tc.ctq6.cn/tc/一日游.jpg

前言

2018年1月5日,广州一日游,由于工作原因在广州出差,所以有闲暇写下此次游玩的一些感受共勉。

景点选择

早茶

广州那旮旯最出名的早茶,也是在知乎上被吐槽的最多的就是广州酒家、陶陶居和点都德了。

Nginx_lua实现waf

WAF产生的背景

过去企业通常会采用防火墙,作为安全保障的第一道防线;当时的防火墙只是在第三层(网络层)有效的阻断一些数据包;而随着web应用的功能越来越丰富的时候,Web服务器因为其强大的计算能力,处理性能,蕴含较高的价值,成为主要的被攻击目标(第七层应用层)而传统防火墙在阻止利用应用程序漏洞进行的攻击方面,却没有办法;在此背景下,WAF(Web Application Firewall)应运而生。

Linux性能优化

性能优化

性能指标

高并发和响应快对应着性能优化的两个核心指标:吞吐延时

https://xiaozhazi.github.io/2020/05/31/Linux%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%AE%9E%E6%88%98%E7%AC%AC%E4%B8%80%E5%91%A8--CPU%E6%80%A7%E8%83%BD%E7%AF%87(%E4%B8%8A)/week1_1.png

  • 应用负载角度:直接影响了产品终端的用户体验
  • 系统资源角度:资源使用率、饱和度等

性能问题的本质就是系统资源已经到达瓶颈,但请求的处理还不够快,无法支撑更多的请求。 性能分析实际上就是找出应用或系统的瓶颈,设法去避免或缓解它们。

Kubernetes架构解析

架构图

一个 Kubernetes 集群由一组被称作节点的机器组成。这些节点上运行 Kubernetes 所管理的容器化应用。集群具有至少一个工作节点。

工作节点托管作为应用负载的组件的 Pod 。控制平面管理集群中的工作节点和 Pod 。 为集群提供故障转移和高可用性,这些控制平面一般跨多主机运行,集群跨多个节点运行

Nacos实践与原理

什么是Nacos

Nacos 概览

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。