zuntan02のはてなブログ

備忘録的なものです。時々職場の技術者ブログにも転記してますが、メインはこちらで。

【zabbix】supervisorでデーモン化したサービスの監視

zabbix-supervisorでの監視

zuntan02.hateblo.jp
上記で立てた検証環境についてzabbixから監視する

【参照】

https://share.zabbix.com/cat-app/process-managers/zabbix-supervisor
https://github.com/rterzi/zabbix-supervisor

■README.md

zabbix-supervisor
Very simple monitoring of Supervisor with Zabbix Agent

Instructions
Place userparameter_supervisord.conf file into /etc/zabbix/zabbix_agentd.d/ directory and restart Zabbix Agent
Place zabbix file into /etc/sudoers.d/ directory
Import zabbix_supervisor_v3_template.xml template via Zabbix Web
Add hosts to Template App Supervisor template
Tested with: Zabbix Server 3.0.14, Supervisor 3.0, Debian 8 & Ubuntu 16

監視対象サーバで以下を実施する

supervisord監視パラメータ追加

sudo wget https://raw.githubusercontent.com/rterzi/zabbix-supervisor/master/userparameter_supervisord.conf -O /etc/zabbix/zabbix_agentd.d/userparameter_supervisord.conf

zabbixファイルをsudoers.dに配置

sudo wget https://raw.githubusercontent.com/rterzi/zabbix-supervisor/master/zabbix -O /etc/sudoers.d/zabbix

zabbixサーバでzabbix_supervisor_v3_template.xmlをインポート

[設定]-[テンプレート]-[インポート]




監視パラメータのコマンド確認

sudo supervisorctl status|grep -v 'RUNNING'|awk '{print $1":"$2}'

監視対象でプロセスを停止してみる

supervisorctl stop hello

監視パラメータを手でたたいてみる

sudo supervisorctl status|grep -v 'RUNNING'|awk '{print $1":"$2}'

→hello:STOPPED
→Zabbixからもアラートが飛ぶことを確認できた

(そのほか)
■Template App Supervisor
https://github.com/Lelik13a/Zabbix-Supervisor-Check
→3年前のセット。やや古いのと追加モジュールが多いっぽいのでやめた

Amazonlinux2でsupervisorを動かすまで

■supervisorとは?

https://www.task-notes.com/entry/20170311/1489224418

Supervisor とは Python 製のプロセス管理ツールで、プログラムなどを簡単にデーモン化することができます。

https://qiita.com/yushin/items/15f4f90c5663710dbd56

プロセス管理/デーモン化のツール。 コンフィグちょっと書くだけで簡単にデーモンプロセスの生成/管理が可能。 本家のドキュメントはこちら http://supervisord.org/

【検証環境構築】

Amazonlinux2にsupervisorを入れてみる 【参照】 https://qiita.com/abouch/items/3f4b422c7d9048936629 http://supervisord.org/installing.html ←公式

pipのインストール

sudo easy_install pip

Installed /usr/lib/python2.7/site-packages/pip-19.1.1-py2.7.egg

supervisorのインストール

pip install supervisor

Successfully installed meld3-1.0.2 supervisor-4.0.3

バージョン確認
supervisord -v

4.0.3

サービス起動設定を行う

pipでのインストールではデフォルトではsupervisord自体のサービス管理は含まれません。動かすために以下の設定を行います。

デフォルトコンフィグファイル生成

echo_supervisord_conf コマンドで設定ファイルの雛形が出力されるのでこれを/etc/supervisord.confに書き出す。

echo_supervisord_conf > /etc/supervisord.conf
includeコンフィグ用のディレクトリ作成
sudo mkdir /etc/supervisord.d
ログ出力先のディレクトリを作成、log rotationの設定も行っておきます。
sudo mkdir /var/log/supervisor/

sudo sh -c "echo '/var/log/supervisor/*.log {
       missingok
       weekly
       notifempty
       nocompress
}' > /etc/logrotate.d/supervisor"

supervisord.conf修正

cp -p /etc/supervisord.conf /etc/supervisord.conf.org

diff /etc/supervisord.conf.org /etc/supervisord.conf
======
28c28,29
< logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log
---
> ;logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log
> logfile=/var/log/supervisor/supervisord.log
32c33,34
< pidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid
---
> ;pidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid
> pidfile=/var/run/supervisord.pid
151c153
< ;[include]
---
> [include]
152a155
> files = supervisord.d/*.ini

※上記の説明

ログディレクトリ変更
;logfile=/tmp/supervisord.log
logfile=/var/log/supervisor/supervisord.log
pid, includeの設定

pidファイルは/var/run/以下に生成するようにし、 /etc/supervisord.d/以下の設定ファイルをincludeできるようにします。

pidファイル
;pidfile=/tmp/supervisord.pid
pidfile=/var/run/supervisord.pid
includeセクションがをイキにして下記の用に修正
[include]
files = supervisord.d/*.ini

supervisord本体のシステムサービス登録

CentOS6系

initスクリプトは以下を使用

https://github.com/Supervisor/initscripts/blob/master/redhat-init-equeffelec

sudo curl -o /etc/rc.d/init.d/supervisord https://raw.githubusercontent.com/Supervisor/initscripts/master/redhat-init-equeffelec
sudo chmod 755 /etc/rc.d/init.d/supervisord
sudo chkconfig --add supervisord
CentOS7系:systemdに登録

/etc/systemd/system/supervisord.serviceを用意

sudo sh -c "echo '[Unit]
Description=Supervisor process control system for UNIX
Documentation=http://supervisord.org
After=network.target

[Service]
ExecStart=/usr/bin/supervisord -n -c /etc/supervisord.conf
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=50s

[Install]
WantedBy=multi-user.target' > /etc/systemd/system/supervisord.service"
サービス起動確認
systemctl start supervisord
systemctl status supervisord
systemctl stop supervisord
自動起動に登録
systemctl enable supervisord.service

特定の処理をデーモン化してみる

動作確認用に10秒毎に現在時刻を出力するシェルを用意

/home/hoge/hello.sh

#!/bin/sh
while true 
do
sleep 10s
echo "hello "`date`
done

このシェルを実行するプロセス設定ファイルを以下のように作成

sudo sh -c "echo '[program:hello]
directory=/home/hoge
command=/bin/sh hello.sh
user=root
autorestart=true  ;
stdout_logfile=/home/hoge/hello.log ;
redirect_stderr=true  ;
' > /etc/supervisord.d/hello.ini"
動作確認

tail -f /home/tcmobile/hello.log →タイムスタンプの値が出続けていればOK

デーモンプロセス一覧確認

supervisorctl

hello RUNNING pid 14742, uptime 0:01:43 動作している

プロセスを停止してみる supervisorctl stop hello supervisorctl

hello STOPPED Jun 27 07:02 PM 止まっている

管理画面について

https://debug-life.net/entry/989 WebUIが存在するが今回は置く

Supervisorの検証はここまで

AWS Inspectorとりあえず動かすメモ

■公式手順を参考にとりあえず動かす

https://docs.aws.amazon.com/ja_jp/inspector/latest/userguide/inspector_installing-uninstalling-agents.html
https://docs.aws.amazon.com/ja_jp/inspector/latest/userguide/inspector_rule-packages.html

1)エージェント導入

監視対象サーバにエージェントを導入

mkdir /usr/local/src/inspector
cd /usr/local/src/inspector
wget https://inspector-agent.amazonaws.com/linux/latest/install
続きを読む

zabbixのアラートをslackに飛ばせなかった→自分自身にhttp(s)アクセス許可したら解決したメモ

【問題解決サマリ】

bageljp/zabbix-slack
https://github.com/bageljp/zabbix-slack/blob/master/slack.sh
を使ってzabbixのアラートをslackに飛ばそうとしたところ、shは叩かれているがタイムアウトした。
自分自身にhttp(s)アクセス許可したら解決した

【問題詳細】

Zabbixがalertを飛ばすタイミングで以下のようにプロセス自体はできているが、最終的にメッセージが飛んでいない状態だった

zabbix    8952  0.0  0.0 115224  3092 ?        S    17:18   0:00 /bin/bash -x /usr/lib/zabbix/alertscripts/slack.sh #alerttest ** alerttest_NG: Too many processes running on...

zabbixserverが自分自身にhttpsリクエストできないのが問題だった。
AWS EC2インスタンスで動作させていたため、セキュリティグループで自身のIPからの接続を許可したところ問題なくslackへのalertが届いた

【インストールメモ】

【参考手順】

https://qiita.com/wapa5pow/items/2327561493015a833c97
https://github.com/bageljp/zabbix-slack
https://qiita.com/tdkaoru/items/7ad9e28cf592f10849df

# アラートスクリプトの置き場所を確認する

grep AlertScripts /etc/zabbix/zabbix_server.conf
→AlertScriptsPath=/usr/lib/zabbix/alertscripts

# インストール

cd /usr/local/share/zabbix/alertscripts
wget https://raw.githubusercontent.com/bageljp/zabbix-slack/master/slack.sh
chmod a+x slack.sh

# slackのwebhookURLを用意
slackのアカウント、チャンネルをご用意いただいた上で
https://my.slack.com/services/new/incoming-webhook
でwebhookURLを取得しておきます。

# slack.shを編集

slack_url='https://hooks.slack.com/services/XXX/XXXX/XXXXX'
zabbix_baseurl="http://zabbix.example.com"
zabbix_username="yourzabbixusername"
zabbix_password="zabbixpassword"

# Zabbixがスクリプトを利用してアラートを通知するように設定する
(以下省略、上記参考手順をご確認下さい)

【AWS】請求額をプロジェクトごとに確認したい(CUR)

【経緯】

これまでプロジェクトごとの請求額を請求明細レポート (DBR)により受けていたが、「AWS Cost & Usage Reports の使用を強くお勧めします」とのことであるためこちらに変更した。

【手順】

1)ユーザ定義タグをリソースに関連付ける

既にいくつかのリソースタグがEC2インスタンスなどに設定されている前提

2)AWS 生成コスト配分タグを有効化

[請求ダッシュボード]-[Cost Management]-[コスト配分タグ]

  • AWS 生成コスト配分タグを[有効化]
  • ユーザー定義のコスト配分タグで配分したいタグを指定して[有効化]

→ステータスがActiveになればOK
f:id:zuntan02:20190417140647p:plain

3)コスト配分レポートを配置するためにS3バケットを用意

EC2ダッシュボード-[S3]-[バケットを作成する]、あとは初期値のまま作成
バケットポリシーについては後ほど設定します

4)AWS のコストと使用状況レポートで[レポートの作成]

[請求ダッシュボード]-[Cost Management]-[Cost & Usage Reports]-[レポートの作成]
・レポート名
・[S3 バケット] で、先に作成したS3バケットを指定。ポリシーが適用されるので権限に問題ない事を確認。
上記以外基本的にはデフォルトでそのまま進める。
f:id:zuntan02:20190417140541p:plain
f:id:zuntan02:20190417140631p:plain

5)請求レポート確認

24時間時間経過後S3バケットを確認

以上

【AWS】カード支払いが拒否されて支払いできなかった

【問題】

20個位あるAWSアカウントのクレジットカードを一気に別カードに乗り換えたところ、9日になってカード会社から不正利用が疑われるとの連絡があった。支払いをしてもらってよいとの連絡をしたが、AWSのマネージドコンソールから[マイ請求ダッシュボード]-[お支払い履歴]を見ると、請求失敗となっていた。

【解決】

カード会社にはこの手の請求について支払いしてよい旨連絡をおこなっており、放置しておけば次回の請求(請求対象月の翌月の8日、12日、16日、20日、28日頃)で請求が成功すると思われるが、念のため手動でお支払い履歴より再決済を実施した。

【再決済成功時のメール】

Title:Thank you for your payment

Dear Amazon Web Services Customer,
We have successfully charged the amount of XXX,XXX JPY you attempted to pay on Apr 9, 20XX.

Below are the details:

AWS Account Number: XXXXXXXXXXXX

Successful charges

Billing Date   Description                   Amount
04/03/20XX   Amazon Web Services charges   XXX,XXX JPY
                                           --------------
Total                                      XXX,XXX JPY
(以下略)

翌朝くらいにこんなメールが来ていれば再決済成功。

【参考】

https://aws.amazon.com/jp/aws-jp-faq/

Q. クレジットカードの支払(決済)に失敗した場合、どうしたら良いですか?

まずはお支払い方法にご登録いただいているクレジットカード情報に誤りがないか、あるいは有効期限内かどうかをご確認ください。 クレジットカード決済が通らなかった原因が不明な場合は、お手数ですがご利用のクレジットカード会社へ直接ご連絡ください。
クレジットカードの失敗につきまして、クレジットカード会社と解決いただけましたら、お支払履歴から再決済を実施してください。(AWSサポートセンター「アカウントおよび請求サポート」窓口でも、再決済を承っております。)

※ 月額利用料の決済が通らない場合、請求対象月の翌月に何度か(8日、12日、16日、20日、28日頃)自動再決済が行われます。
リザーブインスタンスの前払い金など一部お客様にて再決済を実施いただけないものもあります。ご自身で再決済いただけない場合には、サポートセンターよりAWSサポートセンター「アカウントおよび請求サポート」へご連絡ください。

やれやれだ。

【qmail】AmazonLinux+qmail+vpopmail+qmailadmin+autorespondで、autorespondの日本語文字化け対策

【問題】

AmazonLinux+qmail+vpopmail+qmailadmin+autorespondで作られているメールサーバで、autorespondが返す本文/自動返信に引用されるメール本文が文字化けする。
メッセージをqmailadminで作成した場合に起こるが、これはqmailadmineucベースであるため。

【解決サマリ】

1)本文の文字化け

qmailadminで生成された
/home/vpopmail/domains/hoge.com/user/vacation/message
(EUC-JP (LF))をメール標準(※)の文字コードISO-2022-JP」に変換することで解決。
※メールの文字コードは歴史的経緯よりISO-2022-JPがデフォルトとされている
【参照】https://ja.wikipedia.org/wiki/ISO-2022-JP

2)引用文の文字化け

文字化け対策は不可能と思われたため、.qmailで記載されているautorespondのコマンド引数について、オプション(末尾に 0)をつけて送信元のメールを引用させないことで回避した。

【環境】

OS:Amazon Linux AMI
LANG:en_US.UTF-8

qmail:qmail-1.03
qmailadmin:qmailadmin-1.2.16
autorespond:autorespond-2.0.5
vpopmail:popmail-5.4.33

【詳細】

1)不在通知設定

qmailadminで不在通知設定を有効とし、不在通知の本文として以下の内容を作成。

お問い合わせいただきありがとうございます。
確認次第、担当の者より回答をさせていただきます。

※本メールは送信専用です。返信にはご回答できません。
2)文字コード変換

メールサーバにSSHログインし、上記返信ドキュメントが
/home/vpopmail/domains/hoge.com/user/vacation/message
として配置されているので、不要なタイトル、送信元などを削除して本文のみとしたのち、nkf(※)を使用して文字コードISO-2022-JPに変換

nkf -j --overwrite /home/vpopmail/domains/hoge.com/user/vacation/message

# 上記処理で権限が変わってしまうので以下の対応も行う

chown vpopmail:vchkpw /home/vpopmail/domains/hoge.com/user/vacation/message

nkfがインストールされていない場合は以下の手順でインストール

wget http://mirror.centos.org/centos/6/os/x86_64/Packages/nkf-2.0.8b-6.2.el6.x86_64.rpm
yum localinstall nkf-2.0.8b-6.2.el6.x86_64.rpm

【参照】
文字コード変換コマンドの nkfの使い方と実例をまとめました。 - それマグで!

3)autorespondの本文添付をOFFにする

不在通知設定ONの際にqmailadminにより生成されている.qmail(/home/vpopmail/domains/hoge.com/user/直下)の末尾に「0」を追記
ついでに返信回数上限を3→30位にあげとく

/home/vpopmail/domains/hoge.com/user/Maildir/
| /usr/bin/autorespond 86400 30 /home/vpopmail/domains/hoge.com/user/vacation/message /home/vpopmail/domains/hoge.com/user/vacation 0


以上で、(とりあえず)自動応答時の文字化けはなくなったかと思います。

【autorespondのオプション】

# autorespond -h

autorespond: usage: time num message dir [ flag arsender ]

time - amount of time to consider a message (in seconds)
num - maximum number of messages to allow within time seconds
message - the filename of the message to send
dir - the directory to hold the log of messages

optional parameters:

flag - handling of original message:

0 - append nothing
1 - append quoted original message without attachments <default>

arsender - from address in generated message, or:

+ = blank from envelope !
$ = To: address will be used