k8s-prometherアラームルールとalertmanagerアラーム設定

業務上の理由から、当社ではバイナリモードでインストールされていないkube-prometheusパッケージを使用しているため、テスト中に多くのトラブルやピットが発生します。ここに
1つのプロメテウスルールを記録して
、ほとんどのオンラインでこのルールを記述してください。はい、ここではkube-prometheusを使用して、
prometheus-rules.yamlを記録および編集するためのルールとメソッドを記述し(このファイルは、kube-prometheusがコードのクローンを作成した後
、/ manifestsディレクトリにあります)、現在、次のように記述しています。ポッドの実行ステータスと
ノードノードステータスの機能を検出するのは良いことです。他も同様です。次のコンテンツを追加してください。
#ポッドステータスの検出

  • アラート:ポッドステータス
    アノテーション:
    メッセージ:ポッド-{{$ labels.pod}}さら
    expr:|
    kube_pod_container_status_running!= 1
    for:1m
    ラベル:
    重大度:警告

    #ノードノードのステータスを検出する

    • 警告:ノードステータス
      注釈:
      メッセージ:ノード-{{$ labels.hostname}}失敗
      expr:|
      kube_node_status_condition {status = "unknown"、condition = "Ready"} == 1
      for:1m
      ラベル:
      重大度:警告が
      最後に保存されました終了して
      から、alertmanager-secret.yamlファイルを編集します。これは主にメールまたはネイルを送信するように構成されています。
      ここにネイルアラームを設定します。メールにもメッセージが表示されますが、使用されていないため、直接
      ネイルします。アラームを確認した後、次のように、以下を元のデータに
      置き換えます。apiVersion:v1
      data:{}
      kind:シークレット
      メタデータ:
      name:alertmanager-main
      namespace:monitoring
      stringData:
      alertmanager.yaml:| -global

      resolve_timeout:1m#処理タイムアウト
      smtp_smarthost: 'smtp.9icaishi.net:25'#電子メールsmtpサーバープロキシ
      smtp_from:'[email protected]'#電子メール名を送信
      smtp_auth_username:'[email protected]'#電子メール名
      smtp_auth_password: 'Zabbix9icaishi2015'#認証パスワード
      smtp_require_tls:false#tlsを開かず、デフォルトで開く

    レシーバー:

    • 名前: 'webhook'
      webhook_configs:

      • url: ' http:// webhook-dingtalk / dingtalk / send / ' #DingTalkアラーム接続、これは
        しばらくの間個別に展開れます。alertmanagerによって送信されたデフォルトのアラームコンテンツはDingTalkで認識できないため、
        send_resolvedを変換する必要があります:true
        route:
        group_interval:1m#新しいアラームを送信するまでの待機時間
        group_wait:10s#最初に、アラーム通知
        レシーバーのグループを最初に送信する時間:webhook
        repeat_interval:1m#繰り返しアラームを送信する期間
        タイプ:不透明、
        最後に保存して終了。http://www.mamicode.com/info-detail-2845201.html作成者に感謝
        するために、
        ここにネイルアラームを展開するポッドがあります。私は、
        アラームの内容に沿って、次のカスタムアラームスクリプトに基づいてこのグループに属していました。 、次のように変更しました。
        元のアラーム図:
        k8s-prometherアラームルールとalertmanagerアラーム設定
        変更された
        k8s-prometherアラームルールとalertmanagerアラーム設定
        k8s-prometherアラームルールとalertmanagerアラーム設定
        変更は、次のようにスクリプトの内容と一致しています。これはapp.pyスクリプトです。
        
        #!/usr/bin/env python
        import time,io, sys,arrow,os

      sys.stdout = io.TextIOWrapper(sys.stdout.detach()、encoding = 'utf-8')
      sys.stderr = io.TextIOWrapper(sys.stderr.detach()、encoding = 'utf-8')

    フラスコインポートフラスコ
    から、フラスコインポートリクエスト
    インポートリクエストからの応答
    インポートロギング
    インポートjson
    インポートロケール
    #locale.setlocale(locale.LC_ALL、 "en_US.UTF-8")

    app = Flask(name

    console = logging.StreamHandler()
    fmt = '%(asctime)s-%(filename)s:%(lineno)s-%(name)s-%(message)s'
    formatter = logging.Formatter(fmt)
    console。 setFormatter(formatter)
    log = logging.getLogger( "flask_webhook_dingtalk")
    log.addHandler(console)
    log.setLevel(logging.DEBUG)

    EXCLUDE_LIST = ['プロメテウス'、 'エンドポイント']

@ app.route( '/')
def index():
return'Webhook Dingtalk by Billy https://blog.51cto.com/billy98 '

@ app.route( '/ dingtalk / send /'、methods = ['POST'])

def hander_session():

profile_url = sys.argv[1]
post_data = request.get_data()
post_data = json.loads(post_data.decode("utf-8"))['alerts']
post_data = post_data[0]
messa_list = []
if post_data['status'].upper() == "FIRING":
   messa_list.append('### 报警名称: Prometheus-alert')
   messa_list.append('**报警状态: 异常**')
   messa_list.append('**报警时间: %s**' % arrow.get(post_data['startsAt']).to('Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss ZZ'))
   messa_list.append('**报警级别: %s**' % post_data['labels']['severity'])
   messa_list.append('**报警类型: %s**' % post_data['labels']['alertname'])
   messa_list.append('**报警详情: %s**' % post_data['annotations']['message'])
   messa = (' \\n\\n > '.join(messa_list))
else:
   messa_list.append('### 报警名称: Prometheus-alert')
   messa_list.append('**报警状态: 恢复**')
   messa_list.append('**报警时间: %s**' % arrow.get(post_data['startsAt']).to('Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss ZZ'))
   messa_list.append('**恢复时间: %s**' % arrow.get(post_data['endsAt']).to('Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss ZZ'))
   messa_list.append('**报警级别: %s**' % post_data['labels']['severity'])
   messa_list.append('**报警类型: %s**' % post_data['labels']['alertname'])
   messa_list.append('**报警详情: %s**' % post_data['annotations']['message'])
   messa = (' \\n\\n > '.join(messa_list))
status = alert_data(messa, post_data['labels']['alertname'], profile_url )
log.info(status)
return status

def alert_data(data、title、profile_url):
headers = {'Content-Type': 'application / json'}
send_data = '{"msgtype": "markdown"、 "markdown":{"title":\ "%s \ "、" text ":\"%s \ "}} '%(title、data)#タイプ:str
send_data = send_data.encode(' utf-8 ')
reps = requests.post(url = profile_url、data = send_data、headers = headers)
return reps.text

if name == ' main ':
app.debug = False
app.run(host = '0.0.0.0'、port = '8080')
最後に、ミラーを再作成します。
Dockerfile内容によると、次のとおりです。FROMcentos
:7 as build
MAINTAINER billy98 [email protected]
RUN mkdir /root/.pip
ADD pip.conf /root/.pip/pip.conf

RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo && yum install -y python36 python36-pip && pip3.6インストールフラスコリクエストwerkzeug矢印は
ADDapp.py/usr/local/alert-dingtalk.pyを要求します

FROM gcr.io/distroless/python3
COPY --from = build /usr/local/alert-dingtalk.py /usr/local/alert-dingtalk.py
COPY --from = build usr / local / lib64 / python3.6 / site-packages usr / local / lib64 / python3.6 / site-packages
COPY --from = build usr / local / lib / python3.6 / site-packages usr / local / lib / python3.6 / site-packages
ENV PYTHONPATH = usr / local / lib / python3.6 / site-packages:usr / local / lib64 / python3.6 / site-packages EXPOSE
8080
ENTRYPOINT ["python"、 "/ usr / local /alert-dingtalk.py"]
最後にdingding.yamlまたは他のファイル名をk8sに変更し、デプロイするだけです。
k8s関連または自動化された操作とメンテナンスの詳細については、www.wangshuying.cn Webサイトにアクセスして
、操作とメンテナンスに関するその他の知識ポイントを確認してください

おすすめ

転載: blog.51cto.com/461884/2542434
おすすめ