hmx-17の日記

技術ネタとかプライベート

ルンバ980+

我が家ではルンバ980を使っています。
ルンバ i7+は自動でゴミを吸ってくれるらしいのですが、
980は自分でゴミ箱に捨てなければいけません。
そこで、軽く大きなゴミを捨てた後に掃除機で吸えばi7+っぽくなるのでは!?
なんて思って試したら案外良かったので、ルンバ980+と名付けることにしました

オチはありません

ルンバが牧草をよく回収するという話

お久しぶりです。
昨年(2018)から飼っているうさぎに牧草を与えるのですが
ぽろぽろとケージから床に牧草がこぼれてしまうときがあります、
この牧草を人間が回収しようとして、普通の掃除機を持って行って吸っていると
ホースやヘッドに長くて硬い牧草が引っかかって全く吸わなくなることがあります。

まあ、横着して太い牧草を手で拾わないのが悪いっちゃ悪いんですが……
そこでルンバ(980)を派遣したところ、割と綺麗に掃除してくれることが明らかになりました。
ルンバ(AeroForceタイプ)のゴミ吸引の仕組み(下図)を考えると、割と納得かもしれません。
f:id:hmx-17:20191222173048p:plain
まあ、絡まりそうなブラシも、長いホースもなくそのままダストボックスに直結しますからね……
ということで、我が家では草をルンバに吸わせることにしたのでした。

一度Windows Hello for Businessに登録したPCを再インストールするときの注意

ハマりました(挨拶)

Windows Hello for Businessに一度登録したPCをクリーンインストールする際、いくつか注意点があるようです。

  1. TPMを初期化しておく(とても大切)
  2. Azure ADからPCを削除しておく(おまじない?)

1, はtpm.mscTPMを初期化しないと、PCをレジストできないようです。
2, はおまじないなのでやらなくても大丈夫かもしれません。

もしかするとWindows Helloでも同じことが起きるのかも?よくわからんです。
あと、AzureADの同期マネージャはドメインのAdministratorじゃないと基本動かないようです。
(ここもドハマリした)

とりあえずメモ。

ZabbixのヒストリデータをリアルタイムにSplunkへMetricsとしてインポートする方法

はじめに

監視ツールとして大変便利なZabbixですが、forecast関数しかなかったり
他のログとの突き合わせに困るときはないでしょうか。
そんなときには、SplunkにZabbixのヒストリデータを入れてしまいましょう。
ただ、単に入れてもおもしろくないので今回はSplunk 7.0から導入されている Metrics を使います。
(Metrics は通常のSplunkの イベントより高速に統計が取れるそうです)

前提

以下の三つが前提となっています

  • Zabbix Serverが入っていること

v4.0以上でないとリアルタイムエクスポートが動きません。
https://www.zabbix.com/documentation/current/manual/installation/install_from_packages

  • td-agentが入ってること

v3でないと、Splunk HECプラグインのインストールに失敗します。
https://docs.fluentd.org/v1.0/articles/install-by-rpm

  • Splunkが入ってること

v7.0 以上でないと Metrics が作れません。
https://docs.splunk.com/Documentation/Splunk/7.2.6/Installation/InstallonLinux

なお、テスト環境は以下の通りです

  • CentOS 7
  • Splunk 7.2
  • Zabbix 4.2
  • td-agent v3

実作業

そんなわけで、作業をしていきます。

Zabbix Serverの設定

Zabbixの設定
/etc/zabbix/zabbix_server.conf をに以下を追記します。

ExportDir=/var/log/zabbix/
ExportFileSize=500M

追記した後restartするとExportDirの下にrealtime exportされます。
この時の注意としてはExportFileSizeは小さめにしておくのが良いと思います。
(※: ポーラー単位で1ファイル作成される仕様なので
ExportFileSize * ポーラー数 * 2 が最大容量になります
(*2 は指定ファイルサイズを超えるとリネームされるため)
参考:
4 Real-time export of events, values, trends [Zabbix Documentation 4.0]

Splunkの設定

Zabbixのヒストリ用インデックスを作ります
Splunkにログインしてメニューバーより「設定」→「インデックス」を開き、「新規インデックス」をクリックします。
f:id:hmx-17:20190505013319p:plain
インデックス名を入力し、「メトリック」を選択してインデックスを作成します。
f:id:hmx-17:20190505013322p:plain
これでインデックスができました。つぎにHEC(HTTP Event Collector)を作成します。
メニューバーより「設定」→「データ入力」を開き、HTTP イベントコレクタの「新規作成」をクリックします。
f:id:hmx-17:20190505013606p:plain
ざっくりと名前だけ入力します。
f:id:hmx-17:20190505013710p:plain
許可されたインデックスの所で、先ほど作成したインデックスを選択します。
f:id:hmx-17:20190505013744p:plain
これでSplunk側の設定は完了です。

Fluentdの設定

あらかじめ fluent-plugin-splunk-hec を入れます

# td-agent-gem install fluent-plugin-splunk-hec

設定は以下のようにします。

<source>
  @type tail
  format json
  time_key clock
  path {PATH_TO_ZABBIX}/history-*.ndjson

  pos_file /var/log/td-agent/tmp/zabbix-history.pos
  tag splunk.zabbix
 </source>

 <filter splunk.zabbix>
  @type record_transformer
  <record>
    metric_name ${record["host"]}.${record["name"]}
  </record>
 </filter>

 <match splunk.zabbix>
  @type splunk_hec
  hec_host SPLUNK_HOST
  hec_port 8088
  hec_token SPLUNK_HEC_TOKEN
  insecure_ssl true

  index zabbix
  data_type metric
  host_key host
  metric_name_key metric_name
  metric_value_key value
  <fields>
    itemid
    groups
  </fields>
 </match>

in_tailは余りひねりがありませんが、record_transformer を挟んでいます。
これを挟まずに直接流し込むと、メトリクスを見るときにアイテム名が表示されず非常にしんどい思いをします
メトリクス名についてはベストプラクティスを見るとイマイチな感じがしますが、とりあえず動いているのでよしとします。(記号も大丈夫でした)
Best practices for metrics - Splunk Documentation

insecure_ssl についてはテスト用ということで、プロダクション環境で使用することはきちんと検討してください。
(このプラグインHTTPS専用のようです)

Splunkで見る

Fluentd設定を反映したあと、サーチアプリの「メトリクス」から見れます。
あとはSPLを書いて楽しみましょう。

おわりに

とりあえず動く感じにまでは持っていけました。
SplunkはSNMP周りの実装がつらい所があるので、Zabbixと共存出来るようになったのは良いことです。

Windows ServerのVSSで指定ファイルを除外する

Windows Server 2012 R2シリーズ以後に実装されたiSCSIイニシエーターで指定するvhdファイルと
普通のファイルが混在したドライブでシャドウコピーを取るとそのファイルの差分が大きくなるため
保存できる世代数が異常に少なくなります。
そこでレジストリに変更をします。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot
に IDをキーにして文字列型でパスを記載します。
D:\iSCSI\*.vhd
などとします。末尾に半角スペースであけて "/s"を付けるとサブディレクトリまで遡ってくれます。

Raspberry Pi の DHCP更新のタイミングでスクリプトを実行させる

やりたいこと

Raspberry Piのeth0についてるIPアドレスが変更されたら、
プログラムを実行させたい

やりかた

簡単に言うと: dhcpcd-hooksを使う
sudo nano /lib/dhcpcd/dhcpcd-hooks/01-renew
とかに

 if [ "$reason" = "BOUND" ]; then
        if [ "$interface" = "eth0" ]; then
                IP=`/sbin/ip -f inet -o addr show eth0|cut -d\  -f 7 | cut -d/ -f 1`
                echo $IP >> /home/pi/bound.txt
                /usr/bin/wget [some-ome-host] -O - > /dev/null
        fi
        exit 0
 fi

 if [ "$reason" = "RENEW" ]; then
        if [ "$interface" = "eth0" ]; then
                IP=`/sbin/ip -f inet -o addr show eth0|cut -d\  -f 7 | cut -d/ -f 1`
                /usr/bin/wget [some-ome-host] -O - > /dev/null
        fi
        exit 0
 fi

と書けばとりあえずOKです。今回はwgetで特定のサイトに通知させたかったのですが、 $IPを引数にした何かのスクリプトでもいいと思います。