業務上の理由から、当社ではバイナリモードでインストールされていない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作成者に感謝
するために、
ここにネイルアラームを展開するポッドがあります。私は、
アラームの内容に沿って、次のカスタムアラームスクリプトに基づいてこのグループに属していました。 、次のように変更しました。
元のアラーム図:
変更された
変更は、次のようにスクリプトの内容と一致しています。これは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') - url: ' http:// webhook-dingtalk / dingtalk / send / ' #DingTalkアラーム接続、これは
フラスコインポートフラスコ
から、フラスコインポートリクエスト
インポートリクエストからの応答
インポートロギング
インポート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サイトにアクセスして
、操作とメンテナンスに関するその他の知識ポイントを確認してください。