先日にLambdaで外形監視を行ってDatadogでアラートを出させるという内容を書いたけど、それとは別でSSLの証明書についても監視をさせたいということがあった。 で、同じようにLambdaで証明書の残日数を取得してDatadogに連携させ、Datadog側で残日数以下の場合にはアラートを出させる事で対応できそうだったので、やってみることにした。

以下のようなNode.jsのコードをLambdaで定期実行(1日1回くらいでいいと思う)させ、Datadogにメトリクスとして証明書の残日数を通知させる。 (※サンプルコードってことでタイムアウト等の際は何もしてないけど、本当にちゃんとやるならタイムアウト時にもDatadogへのポストで関数作って呼び出したほうが良いと思う)


Lambdaで外形監視をしてサービスダウンしたらDatadogでアラートを出させる

Datadogで監視をしているシステムで外形監視をしたいということがあったのだけど、Datadogで用意されている外形監視の方法というのがDatadogエージェントが必要になってしまう。 それだと監視用のホストで余分にお金がかかってしまうので、Lambdaから1分間隔で監視をして、連続してアクセスできなかった回数をメトリクスとしてDatadogに転送させることで外形監視をさせることにした(3回連続で失敗したらアラートを出させる)。

Lambdaの環境変数を使っているので、「ERR_COUNT」でデフォルト値0で定義しておくのを忘れずに行うこと。 httpステータスが200以外の場合はア...


システムの監視などで、WEBサービスの死活監視(外形監視)の際にSSL証明書なども一緒に監視する事はあるのだけど、ついででドメインの更新期日なども一緒に確認したいことがある。 だが、ドメイン情報を取得する際に使用するwhoisはドメインの種類によってフォーマットが全く違う(項目名すら違う)ため、汎用的に情報を取得することができない。 ドメイン期限とか、.jpだと項目すら無い。 whoisの次世代プロトコル「RDAP」というものも出てきてるようだけど、2017年11月時点ではまだ実用フェーズまではきてないようなので、この時点では利用できない。

で、なんかいい方法ないかなーと調べてみたとこ...


監視周りの設定をやっていた際、対象URLの証明書日数が迫ってきたらアラート出すように設定をしていたのだけど、日数ならシェル芸で取れるなと思ったので備忘として残しておく。 以下のように、opensslコマンドでサイトにアクセスして直接証明書を取得し、そこから期日を取ってきて日付計算をすればいい。

echo|openssl s_client -connect ドメイン名:443 2>/dev/null|openssl x509 -noout -enddate|cut -d= -f 2-|xargs -I@ bash -c 'echo $((($(date +%s -d "@")-$(date...

補完されているコマンドの一覧を取得したいという場合、単純に考えると以下のように$PATHを分解して各ディレクトリごとのファイル一覧を取得するような処理が考えつく。

echo -e ${PATH//:/\\n}|xargs -I@ ls -1 @ 2>/dev/null | sort
echo -e ${PATH//:/\\n}|xargs -I@ ls -1 @ 2>/dev/null | sort | grep ^STR

ただ、実はこんなことをしなくてもbashで用意されている補完用のコマンド「compgen」を使うことで、もっとスマートにコマンド一覧を取得できる。

comp...

コンソール上で文字列を斜めに表示させたいなと思ったので、やってみることにした。 想定ではもっと簡単、かつ短く記述できると思っていたのだけど、意外とそうでもなかった。

とりあえずawkでやった場合。grepで一度各文字を1行づつに出力し直している。

echo qwerty | grep -o . | awk '{printf("%0"NR"s\n",""$1)}'
[root@BS-PUB-CENT7-01 ~]# echo qwerty | grep -o . | awk '{printf("%0"NR"s\n",""$1)}'
q
 w
  e
   r
    t
     y...

ちょっとお酒も入ってる状態でシェル芸botで遊んでいた時、ふとteeで別プロセスに出力を渡す際にブレース展開を利用できないかと考えた。 teeコマンドといえば、パイプで受け付けた内容を指定したPATHのファイルと標準出力に渡してくれるコマンドで、プロセス置換を利用すれば同じ出力を別々のプロセスに渡せるのは有名でよく使われていると思うのだけど、その際にブレース展開をすることで短く書いてみようというのが今回の内容。 で、以下のようにevalをかます必要はあるけど可能なので記録として残しておく。

コマンド | eval tee ">(コマンド2 "{1..10}")" ">/dev/null...

指定したクエリに関する情報をjsonで取得できる(日時であれば、それを分解して日付や時間だけ)WEBサービス、『cli.fyi』なるものを見かけたので触ってみることにする。 指定できるクエリは結構種類があるようで、例えば国名を指定すると、首都や通過、国際電話番号のコードなどが取得できる。

[root@BS-PUB-CENT7-01 ~]# curl cli.fyi/japan
{
    "type": "Country Query",
    "data": {
        "commonName": "Japan",
        "officialName": "Japan...

Apache 2.4でグローバルIPアドレスを用いたアクセス制御を行う場合、以下のようにRequireディレクティブでアクセス元のグローバルIPアドレスを指定する。


  Require ip 8.8.8.8

で、この時にAWSのELB(ALB)の後ろにいる場合だと、Apache側で認識するアクセス元IPアドレスはELBのローカルネットワークアドレスになってしまう。 Require ipでグローバルIPアドレスを認識する場合は、以下の一行をhttpd.confに追記してやり送信元IPアドレスにX-Fo...


コンソール上で、サブドメインを後ろから順に階段状に出力させたいということがあったので、備忘で残しておく。 前にこちらで書いてた内容をベースに、以下のように記述することで、区切り文字(今回の場合は「.」)ごとに階段状に出力をしている。


SSL証明書をWEBサーバに設定する際、「SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch」といったエラーが出ることがある。 これ、要は証明書と鍵ファイルが対応していない(要は取り違えている)ことが原因。 で、これを事前に確認する場合は、以下のようにコマンドを実行し、その出力結果が同じかを確認すればいい。

openssl rsa -check -noout -modulus -in 鍵ファイル | awk -F= '{print $2}'
openssl x5...

『Piano-rs』でターミナル上でピアノの演奏をする

全然別件の調べ物をしていたところ、『Piano-rs』なるツールを見かけた。 何するツールかというと、その名の通りPianoを弾くツールである。 ターミナルで(エッ(´・ω・`))。

お試しは、今回はUbuntu 16.04 LTSにインストールする。 以下のコマンドを実行してインストールを行う。(Rustで書かれているようなので、事前にaptでcargoをインストールしておく。alsa.pcがないと言われた場合は「libasound2-dev」を入れるといいだろう)。

git clone https://github.com/ritiek/piano-rs
cd piano-rs...