Zabbix3.x系からSlack通知

Zabbix3.x系からSlack通知

概要

Zabbix3.x 系での Slack への障害内容通知方法をまとめました。

簡単なメッセージの通知でなく
ある程度見やすく、状況判断しやすい様にしました。

↓ まずざっくりとこんな感じです。

手順

Git に上げてます。ご参照ください。

とにかくシンプルにPHPでLineBotApiを書きました

とにかくシンプルにPHPでLineBotApiを書きました

概要

話題の Line bot Api 用スクリプトを PHP で書きました。

とにかくシンプルに = カスタマイズしやすさ

という所で
修正する場所を限って利用できるようにしたつもりです。

作ったもの

適当に文字を打つと →「hello」
perfect と打つと → 「human」

と返すようにした本当にシンプルなものです。

そのロジック部分をカスタマイズすれば
マイ bot ができますね。

環境

  • さくらレンタルサーバ VPS CentOS release 6.7 (Final)
  • PHP 5.6.16

SSL は無料の StartSSL を利用しました。取得・設定は以下参照してください。

スクリプト

function getMessage で bot に返信させたいメッセージを決定しています。

そこで他 API を呼んだり、サイトからスクレイプしたり情報をとってきて返してあげると
簡易的なメッセージ返信 Line bot できあがりです。

こんな感じです!

パスワードなし!公開鍵認証でSSHログイン

パスワードなし!公開鍵認証でSSHログイン

概要

rsync を Jenkins や crontab で利用する場合
SSH 経由で実行する際、
パスワードを求められ処理が中断してしまうということがあるかと思います。

その為、SSH で公開鍵認証という方法でパスワードを求めることなく
SSH アクセスできる様な設定を明示的にしました。

以下まとめます。

環境

  • 接続元サーバ A の global IP を 192.168.11.200 とします。
  • 接続先サーバ B の global IP を 192.168.11.201 とします。

サーバ A → サーバ B へ 公開鍵認証で SSH ログインを目的とします。

以下手順です。

接続元サーバ A

公開鍵作成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[host A]# mkdir ~/.ssh
[host A]# ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/var/lib/pgsql/.ssh/id_rsa): ←何も入力せず[Enter]を押す
Enter passphrase (empty for no passphrase): ←何も入力せず[Enter]キーを押す
Enter same passphrase again: ←何も入力せず[Enter]キーを押す
Your identification has been saved in <home>/.ssh/id_dsa.
Your public key has been saved in <home>/.ssh/id_rsa.pub.
The key fingerprint is:
7e:38:5c:9f:f3:e2:67:eb:ce:c6:07:83:48:c8:85:ec

[host A]# ls -l
合計 12
-rw------- 1 hogehoge hogehoge 668 5月 25 15:11 id_rsa ←作成された秘密鍵
-rw-r--r-- 1 hogehoge hogehoge 610 5月 25 15:11 id_rsa.pub ←作成された公開鍵

[host A]# cat id_rsa.pub
<中身をコピーする>

接続先サーバ B

接続元サーバの公開鍵を authorized_keys に保存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[host B]# cd ~
[host B]# chmod 755 .
[host B]# mkdir .ssh
[host B]# chmod 700 .ssh
[host B]# cd .ssh
[host B]# vi id_rsa.pub
<接続元サーバでコピーした公開鍵の内容をペースト>

[host B]# ls id_rsa.pub
id_rsa.pub

[host B]# cat id_rsa.pub >> authorized_keys
[host B]# chmod 600 authorized_keys
│-rw------- 1 hogehoge hogehoge 796 4月 5 15:50 authorized_keys

接続元サーバのアクセス許可設定

  • /etc/hosts.allow を編集し 接続元 IP 許可設定する。
1
[host B]# vi /etc/hosts.allow
1
2
3
4
5
6
7
8
#
# hosts.allow This file describes the names of the hosts which are
# allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
sshd: xxx.x.xx.xx xxx.x.xxx. xx.xx.x. xx.xx.xxx.xx
sshd: xxx.xx.xxx.xx
sshd: 192.168.11.200 ← 追加

公開鍵認証許可設定

  • バックアップ保存
1
[host B]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bk
  • 修正
1
[host B]# vi /etc/ssh/sshd_config
1
2
3
4
5
#PubkeyAuthentication yes    ← コメントアウトを外す
#AuthorizedKeysFile .ssh/authorized_keys ← コメントアウトを外す

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
  • 差分確認
1
2
3
4
5
6
7
[host B]# diff /etc/ssh/sshd_config.bk /etc/ssh/sshd_config

< #PubkeyAuthentication yes
< #AuthorizedKeysFile .ssh/authorized_keys
---
> PubkeyAuthentication yes
> AuthorizedKeysFile .ssh/authorized_keys
  • sshd configure チェック
1
2
3
[host B]# sshd -t
// 何も出力されなければ構文上問題なし。
// 但し存在しないパスを指定するなどまではチェックしないので注意。
  • sshd リスタート
1
2
[host B (CentOS7)]# systemctl restart sshd
[host B (CentOS6)]# service sshd restart

以上で接続先サーバでの準備完了しました。

接続元サーバ A から パスワードなしで SSH 接続する

1
2
[host A]# ssh 192.168.11.201
Last login: Tue Apr 5 16:02:08 2016 from xxx.xx.xxx.xxx

ログイン成功!

ログイン失敗する場合

  • ログを調査しましょう。

権限や所有権がよろしくない、
ということで認証失敗理由がわかります。

1
2
3
# tail -f /var/log/secure

Authentication refused: bad ownership or modes for directory <homeディレクトリ>

あとがき

以下デフォルトの sshd_config の設定の場合
パスワード認証と鍵認証、どちらも認証パス可能です。

1
2
3
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes

インフラ専門の会社さんや街の噂では
デフォルトでどちらも認証 OK にしている企業さん多いという話でした。

以上です。

awk で CSV の特定列を整形 〜数値を文字列扱いする〜

awk で CSV の特定列を整形 〜数値を文字列扱いする〜

概要

ある顧客データを抽出してレポートしたい、というときに
CSV ファイルで “090” などと携帯電話があると Excel で CSV ファイルを開いたときに
“90” になってしまうということがあるかと思います。

そんなときの為に特定列のみ数値を文字列扱いにしたときの内容まとめです。

Excel で数値を文字列扱いするには

1
"090"

とあったとすると

1
="090"

のように整形することで文字列扱いになります。

例)

1
"デミスハサビス",="09099999999","DeepMind"

整形してみる

  • 例)以下のような tmp.csv があるとします。
1
2
"デミスハサビス","09099999999","DeepMind"
"いとうせいこう","08088888888","エムパイヤ・スネーク・ビルディング"
  • 2 つ目のカラムのみ =を左端に追加します
    ※”(ダブルクォテーション)で囲まれた値の左側に「=」を追加します。
    ※あえて分かりやすく $1, $2, $3 の項目を明示的に指定してみました。
1
2
3
$ awk -F ',' '{print $1 ",="$2","$3}' tmp.csv
"デミスハサビス",="09099999999","DeepMind"
"いとうせいこう",="08088888888","エムパイヤ・スネーク・ビルディング"

上記のように 「=」 が追加されました。

  • 出力先を指定
1
2
3
4
$ awk -F ',' '{print $1 ",="$2","$3}' tmp.csv > output.csv
$ cat output.csv
"デミスハサビス",="09099999999","DeepMind"
"いとうせいこう",="08088888888","エムパイヤ・スネーク・ビルディング"

output.csv を Excel で開いてみます。

できました ♪

おまけ

Excel を開く際、Windows ではデフォルト SJIS なので文字コードが UTF8 の場合、文字化けします。
以下 CSV ファイルを SJIS に文字コード変換します。

1
$ nkf -sLw output.csv > output_sjis.csv

以上です。

.htaccessが効かない、動かないときの対処

.htaccessが効かない、動かないときの対処

概要

.htaccess に設定した通りに動作しない、そもそも読み込んでいないように見える場合の対策です。

http だと mod_rewrite でリダイレクトするけど、 https だとしない、とか
ありがちな設定ミスパターンは以下基本的なことを確認して解決できます。

検証環境

  • CentOS 6.6 (Final)
  • Apache/2.2.15(Unix)

そもそも .htaccess を利用するには

/etc/httpd/conf/httpd.conf 等設定ファイル内で以下の記述が必要です。

1
AllowOverride All

mod_rewrite を利用するには

利用頻度の多い mod_rewrite を利用するには以下が必要です。

1. mod_rewrite.so インストール

2. mod_rewrite.so を Apache 設定ファイルからロード

まずは上記の確認です。

1. mod_rewrite.so インストール確認

Apache の場合、大抵 modles ディレクトリ以下に格納されてます。

1
2
$ ls -al /etc/httpd/modules/mod_rewrite.so
-rwxr-xr-x 1 root root 60464 10月 16 23:49 2014 /etc/httpd/modules/mod_rewrite.so

2. mod_rewrite.so を Apache 設定ファイルからロードされているか確認

Apache 設定ファイル
/etc/httpd/conf/httpd.conf/etc/httpd/conf.d/*.conf で以下を設定している。

※環境によっては /etc/httpd/conf/httpd.conf に設定ファイルを置いてない場合もあるので
 あくまで一般的な例とします。

1
LoadModule rewrite_module modules/mod_rewrite.so

補足

モジュール読み込み設定は大抵、
以下のように ディレクティブ で AllowOverride All が設定されているかと思います。

以下例では「/var/www/html」ディレクトリ以下では 配置した .htaccess を優先して設定されることになります。

1
2
3
4
5
6
<Directory "/var/www/html">
AllowOverride All
Options -Indexes FollowSymLinks Includes ExecCGI
Order allow,deny
Allow from all
</Directory>

万が一 mod_rewrite.so モジュールが存在しない場合は Apache の再コンパイルが必要になります。

Apache に mod_rewrite をインストールしリコンパイル

  • リコンパイルして Apache 再起動します。
1
2
3
4
5
$ sudo su -
# cd <path to httpd source>
# ./configure –enable-ssl=shared –enable-rewrite –enable-deflate –enable-headers –enable-so
# make & make install
# service httpd restart

以上です。

IPアドレスからホスト情報取得

IPアドレスからホスト情報取得

概要

ipinfo.io の API により
ホスト情報を取得するシェルを書きました。

不審なアクセスが増えてきた、
というときに接続元ホストを探る際に利用しています。

ファイルの中身でなくファイル名の文字コードを変更する

ファイルの中身でなくファイル名の文字コードを変更する

概要

EC サイトの売上のレポートなどを送信したい、というとき
ファイル名に日本語を指定せざるを得ないとき(クライアントさんが「絶対に日本語!」)
がときたまあります。

  • クライアント様の環境は Windows。
  • Windows デスクトップのデフォルト文字コードは Shift JIS。

Linux で作成したファイルのデフォルト文字コードが UTF-8 だった場合
メールに添付し送信し、受信した Windows PC でダウンロードすると
ファイル名が文字化けしてる、
なんてことがあります。

そんなとき、ファイルの中身でなくファイル名自体の文字コードを変更したので
その対応まとめです。

環境

  • CentOS release 5.11 (Final)
  • convmv 1.10

convmv を利用します。

  • CentOS なら yum でインストール
1
# yum install -y convmv

手順

  • デフォルト文字コード UTF-8 とします。
1
2
3
4
5
6
7
8
9
10
// UTF-8 でファイル名「ほげほげ」作成
$ touch ほげほげ

// ファイル名の文字コードを UTF-8 から ShiftJIS に変換
$ convmv -r -f utf8 -t sjis ほげほげ --notest
mv "./ほげほげ" "./ق°ق°"
Ready!

$ ls -al
-rw-rw-r-- 1 user group 0 3月 16 16:45 ?ق??ق?

全く読み取れないような文字になります。

ごく稀に「絶対日本語で!」という方の一助になれば何よりです。

MySQL SQL結果をINTO OUTFILEを使用せずCSV取得

MySQL SQL結果をINTO OUTFILEを使用せずCSV取得

概要

MySQL SELECT 文の結果を csv で取得する際
以下のように CLI 上で実行することで取得できます。

1
2
$ mysql -u <user> -p<password> <db_name>
mysql> SELECT * FROM [table] WHERE hoge=hoge INTO OUTFILE "/tmp/output.csv" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"';

ですが、mysql ログインユーザの権限に FILE がない場合
以下のようなエラーで出力できません。

1
RROR 1 (HY000): Can't create/write to file '/tmp/output.csv' (Errcode: 13)

FILE の READ/WRITE 権限を付与すれば問題ないですが
権限周りをいじりたくないときなどあるかと思います。

本番環境の DB で権限周りがブラックボックス化していて
FLUSH PRIVILEGES すると何か障害が出るんじゃないかとか汗

その際に実施したことを以下まとめました。

考え方

TXT として取得して sed で csv ファイルに加工する、
という方法で実行しています。

例) 以下のような SQL 実行結果を取得したとすると

1
2
3
4
$ less output.txt

商品1 2 1,000 2,000
商品2 3 1,500 3,000

↓ Excel で表示されるように加工すると

1
2
3
4
$ less output.txt

"商品1", "2","1,000","2,000"
"商品1", "3","1,500","3,000"

手順

query 結果を ouput.txt に出力

1
$ mysql -u <user> -p<password> <db_name> -e"<query>"  > output.txt

Excel 用に加工

  • 力技
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 各行の一番前(「^」)に「"」を付加
$ cat output.txt | sed -e 's/^/"/g' > output2.txt

"商品1 2 1,000 2,000
"商品2 3 1,500 3,000

// 各行の一番後(「$」)に「"」を付加
$ cat output2.txt | sed -e 's/$/"/g' > output3.txt


"商品1 2 1,000 2,000"
"商品2 3 1,500 3,000"

// タブ「/t」を「","」に変更
$ cat output3.txt | sed -e 's/\t/","/g' > ouptut4.txt

"商品1","2","1,000","2,000"
"商品2","3","1,500","3,000"

文字コード変更

この CSV を利用する方(提出先)の方の文字コードに合わせます。
提出先では Shift JIS がデフォルトとのことで そこに変更します。

1
2
$ nkf -g output4.txt
UTF-8
1
2
3
4
$ nkf -sLw output4.txt > output.csv

$ nkf -g output.csv
Shift_JIS

これで INTO OUTFILE を利用せず CSV ファイルを取得できました。
ouput.csv

おまけ

ファイル名に日付をつける。

1
$ mv output.csv output_`date '+%Y%m%d'`.csv
1
2
3
4
$ ls

output.csv
output_20160314.csv
StatsBotのSlack通知 通知方法と通知時の見え方 一覧

StatsBotのSlack通知 通知方法と通知時の見え方 一覧

概要

Statsbot は、GoogleAnalytics、NewRelic、Mixpanel と連携し
各データを Slack へ通知できるサービスです。

連携自体は画面中央の Add to Slack ボタンを押下し
各種手続きを手順通り行えばすぐに連携できます。

※導入まで 10 秒ほどでした。

データホテルさんが導入法まとめていたので参考までに。

各種設定方法がありますが、どんな見え方になるかは
試してみないとわからなかったので、まとめました。

設定は大きく 3 つあります。

Item Detail
Metrics セッション数,ユーザ数,コンバージョン,直帰率,新規ユーザ,
Alert ユーザ,コンバージョン,イベントが閾値を超える or 下がると通知
Reports まとめ(ユーザ数, 新規ユーザ数, PV, コンバージョン数, コンバージョン率, イベント数, 平均セッション時間(秒))を通知

以下設定を通知の見え方です。

※データは知り合いの EC サイトです。
恥ずかしいデータもありますが、StatsBot の導入を条件に快く許諾いただきました(^-^)

Metrics

Sessions

  • セッション数
1
@Statsbot sessions [today, yesterday, this week, last week, this month, last month, this year]

Users

  • ユーザ数
1
@Statsbot users [today, yesterday, this week, last week, this month, last month, this year]

Conversions

  • コンバージョン
1
@Statsbot conversions [today, yesterday, this week, last week, this month, last month, this year]

Conversion Rate

  • コンバージョン率
1
@Statsbot conversion rate [today, yesterday, this week, last week, this month, last month, this year]

Bounce Rate

  • 直帰率
1
@Statsbot bounce rate [today, yesterday, this week, last week, this month, last month, this year]

New Users

  • 新規ユーザ
1
@Statsbot new users [today, yesterday, this week, last week, this month, last month, this year]

例) 今週の新規ユーザ (先週との比較)

1
@Statsbot new users this week

例) 今日の新規ユーザ (昨日との比較)

1
@Statsbot new users today

Alert

– Stay on top of your website traffic –

  • Set Alert
    アラート設定
1
@Statsbot alert [users, conversions, events] [above, below, >, <] NUM

例) ユーザ数が 1000 人を超えたらアラート設定

1
@Statsbot alert users > 1000
  • アラート一覧 表示
1
@Statsbot list alerts
  • アラート一覧 削除
1
@Statsbot alert remove ID

Reports

Summary

  • まとめ (ユーザ数, 新規ユーザ数, PV, コンバージョン数, コンバージョン率, イベント数, 平均セッション時間(秒) )
1
@Statsbot summary [today, yesterday, this week, last week, this month, last month, this year]

Source

  • 流入
1
@Statsbot sources [today, yesterday, this week, last week, this month, last month, this year]

Schedule

  • スケジュール 日時週・頻度設定
1
@Statsbot schedule [summary, sources, status]
  • スケジュール一覧表示
1
@Statsbot list schedule
  • スケジュール設定解除
1
@Statsbot unschedule ID
inputボックスにURL打ち込むと自動URL短縮化されるjs

inputボックスにURL打ち込むと自動URL短縮化されるjs

[f:id:kenzo0107:20160310115924p:plain]

概要

最近では URL に日本語を利用するケースが増えてきました。

SEO として価値がある作業かどうかは眉唾ではありますが
ネット利用率の低い方にとっては UI としては分かりやすいのかもしれません。

その点を論じているブログがありました。

日本語を含む URL を Twitter へ投稿するようなソーシャル連携ツール等の開発の際、
文字数に厳密に注意する必要があり、短縮の自動化を bitly API で行いましたので
そのまとめです。

手順

  • 以下 js を html 等でロードしてください。

以上