hmx-17の日記

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

一度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を引数にした何かのスクリプトでもいいと思います。

ツッコミ(2)

言及リンク:
willow710kut.hatenablog.com
(この人とは知り合いなので、チラシの裏的な感じはありますが……)

プライベートクラウドの定義は割と曖昧ですが、会社にある仮想マシンサーバのことをプライベートクラウドと言ったりもします。
Azureの定義では
>プライベート クラウドは、一般向けではなく特定のユーザーのみを対象とした、インターネットまたは内部のプライベート ネットワーク経由のいずれかで提供されるコンピューティング サービスであると定義されています。
なるほど。

MACアドレスはご指摘の通り、前半24bitを1ベンダで複数使用している場合も有ります。
MACアドレス検索 - UIC などを使って調べてみましょう。
ちなみに、VMWare仮想マシンにおいては下位24bitはランダムに生成しているので、
別のVMWareインスタンスとカブったりするかも。
(vCenterとかで管理しているホストとは別に野良VMホストがいたら発生しそう)

OSI参照層は名前と通る順番だけ覚えてればOKです。
中を覚えるなら最低限必要なのはL1, L3, L7です。
Ethernetの種類(100M, 1Gbps, 10Gbpsと光/copperの違い)
IPルーティングの最低限の理解, TCPUDP, TCP 3-way handshakeなどは理解しておいて損は無いでしょう。
余裕があればIPルーティングについて知識を深めると良いとは思いますが、最初はRIPもOSPFもBGPも見なかったことにしましょう。

L3層より上をきちんと理解したければRFCなどを参照すると良いと思いますが、最初はRFCを読む必要はないでしょう。

入門向けの本は本屋でインフラカテゴリの本をチラ見してわかりやすそうな本を買うと良いでしょう。

インフラの勉強

言及リンク:
willow710kut.hatenablog.com

以下、個人的な見解。
先に持論的を言うと「コードを書く人はインフラを知って欲しい」ということはある。
インフラエンジニアとして、「そんなコードを書かれるとログわからんから保守できねえ!」
とかそういうことは往々にしてあるわけで、そういう悲しい出来事を避けるために一定の経験はしておいて欲しいと言うことです。

が、インフラを触ったことがない人に対してそれは酷だし時間が無いってのも理解します。
この方は作りたい物があるようなので、それにそって自分なりにコストと時間を決めてサービスを作るのが良いと思います。
例えばリンク内にあったDocker。Dockerをホストするサーバを構築することができないなら、とりあえず
AWS Elastic Container Serviceとかを使ってショートカットするのがよいと思います。
もちろんお金は掛かりますが、とりあえずDockerのイメージより下は見えなくて済みます。
もっと言えばStatic HTMLなんてのはAWS S3等のサービスに入れておけば外部から見えるようになりますし、
CloudFrontとLambda@Edgeを使えばBasic認証もサーバレスで作ることはできます。
……すこし横道にそれました。

要するに、「どこの分野を」「どれ位の時間と」「どれ位のお金と」「労力を掛けて」サービスを作るかというところになります。
勉強も労力にカウントしますので、サーバレスアーキテクチャに慣れてる人はお金を掛けてAWSでバッチリ作り込めば時間も節約できるでしょう。
初心者であれば、上記のパラメータを上手に調節してサービスを作るのがよいでしょう。
ただし、作るのに夢中であとの保守を考えていなかった!なんてことにならないように設計しましょう。