Zabbixによる自動障害回復

WebサーバでIISが落ちたらたとえOSが動いていたとしてもそれはただの電気を食うだけの暖房機器です。

というわけで、IISが何らかの原因で停止してしまった場合に起動して上げるコマンドを送って上げるようにしました。もちろん、何かの原因があって起動できない場合は人手で原因を除去してあげなきゃ行けないわけですが。。。

 

前提として、Template OS Windowsを使用していること。これで、サービスが停止したときにトリガーが引かれるはずです。

Webサーバ側でZabbixリモートコマンドを実行できる設定にする。

 

zabbix_agentd.conf

### Option: EnableRemoteCommands
# Whether remote commands from Zabbix server are allowed.
# 0 - not allowed
# 1 - allowed
#
# Mandatory: no
# Default:
EnableRemoteCommands=1

 

 

アクション設定をする

トリガー名にIISのサービス名であるW3SVCを含むことを実行条件にします。

 

実行内容として、リモートコマンドで現在のホストでカスタムスクリプトを実行とします。スクリプトの内容はW3SVCサービスが起動するように「net start W3SVC」としました。

 

動作検証してみる

動作検証のため、サービスを停止してみたところ、リモートコマンドが実行され自動的に障害復帰した。

 

 

 

 

 

 

 

Zabbix4.0にアップデートしてみた

以下、悪い子の手順。

よい子の手順はあれこれやり過ぎたのでかけない。

また、DBをバックアップしていないという致命的悪い子。

 

  1. お気に入りのコンソールでログインしてみる。とりあえず、Teratermでログインした。
  2. suする
  3. Zabbix ServerとZabbix Agentを停止する
  4. 現行Zabbixのリポジトリをアンインストールする
  5. 新しいZabbixのリポジトリをインストールする
  6. yumのキャッシュ削除する
  7. アップデートする
  8. Zabbix ServerとZabbix Agentを起動する

 

su

systemctl stop zabbix-agent zabbix-server

yum remove zabbix-release

rpm -i https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm

yum clean all

yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent

systemctl start zabbix-server zabbix-agent httpd

 

ログインフォームを使ってみた

ASP.NETには標準的にログインに関するフォームだったり、新規ユーザの登録、パスワード忘れに対応するようなクラスが備わっている。

MS-SQLServerだとかと連携する方法は記事が見つかったりするのだが、Oracleに関してはまとまった記事がなくどうしていいのかさっぱりだったのでまとめておく。

 

前提

ODP.NETが導入済みであること。

<oracle_home>\ASP.NET\SQL\

あたりになにやらSQLファイルがいっぱいあること。

適当な(適して当たっている)権限が付与されたOracleユーザが使えること。

 

準備

「<oracle_home>\ASP.NET\SQL\」 にある以下のSQLをSQLPlusあたりで実行

 

  • InstallOracleASPNETCommon.sql
  • InstallOracleMembership.sql

 

sqlplus user/pass@tnsname @InstallOracleASPNETCommon.sql

sqlplus user/pass@tnsname @InstallOracleMembership.sql

 

 

 すると、いくつかのテーブルやらビューやらパッケージが作成されます。

 ここで作成されたテーブルに認証情報が書かれていく感じです。

 

ユーザーを作ってみる

画面にCreateUserWizardを貼り付けます。デザインビューから貼り付けるのが簡単でよいでしょう。

E-Mailの登録とか秘密の質問とかいらないので普通に画面から削っておきます。

 

 

 

Web.configの編集

次に、このままだとSQLServerを探しに行ってしまうようなのでWeb.configを編集してOracleに接続しに行くように変えてあげます。

 

OracleからOracleMenbershipProviderというのが出ているのでそれに変えます。

2カ所くらい追加が必要だと思います。

<system.web>
<membership>
<providers>
<remove name="AspNetSqlMembershipProvider" />
<add name="AspNetSqlMembershipProvider"
type="Oracle.Web.Security.OracleMembershipProvider, Oracle.Web, Version=4.121.2.1,
Culture=neutral, PublicKeyToken=89b483f429c47342"
connectionStringName="XE"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="false" />
</providers>
</membership>

先ほど、秘密の質問とEmailのフォームを削ったのでrequiresQuestionAndAnswerとrequiresUniqueEmailをfalseとしておきます。CreateUserWizardのプロパティとしてもRequireEmailをfalseとする必要があるかもしれません。

 

 

<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None"/>
</appSettings>
<connectionStrings>
<add name="XE" connectionString="user id=scott;password=tiger;data source=XE;"/>
</connectionStrings>

 

connectionStringのユーザとパスワード、データソースの部分は適宜変更してください。

 

以上で、ユーザ登録できるようになっていると思います。(コードを1行も書かずに)

パスワードも一応暗号化されて登録されているようなのでいい感じです。

 

ログインしてみる

次に、先のユーザ登録フォームで作ったユーザでログインできるようにしてみます。

本当は、Web.configに定義したmembershipでできればよかったんだけどもやり方うまくわからず。とりあえず、ごり押しで作ってみています。

 

とりあえず、「Login」を画面に貼り付けます

 

 

 

 Authenticateイベントのメソッドを作ります。

 

 

 

そこに、今度はコードを書いていきます。

 

OracleMembershipProvider omp = new OracleMembershipProvider();
NameValueCollection name = new NameValueCollection();
name.Set("connectionStringName", "XE");
name.Set("requiresQuestionAndAnswer", "false");
name.Set("requiresUniqueEmail", "false");
omp.Initialize("AspNetSqlMembershipProvider",name);

if (omp.ValidateUser(LoginForm.UserName, LoginForm.Password))
{
e.Authenticated = true;
}
else
{
e.Authenticated = false;
}

 Web.configに書いた情報を読ませてOracleMembershipProviderをインスタンス化する方法がよくわからないので同じ情報を作ってあげてInitizlizeしてあげています。

ValidateUserで認証かけてあげて認証通ればAuthenticatedをtrueに設定するとログインしたことになります。

実際は適宜ログインIDなど必要情報をセッションに持つなどするとよいでしょう。

 

 

情報処理安全確保支援士の集合講習に行ってきた

尚、内容については秘密ですので。

やっぱり、講習単体でみると高いよなあという感想しか残らない。
これ、資格が絡まなければ受けに行かないやつである。講師がグループごとに張り付いてそれでグループワークというのならまあわかるんだけどもなあと。

なんにせよ、あと2年間は4万円で維持できるのでそこまでは頑張りたい所存。

MDR-7506のイヤーパッドを交換した

MDR-7506イヤーパッドが非常に劣化していたので交換した。
特殊な工具もなく手で交換できるのでお勧めである。

MDR-7506MDR-CD900STイヤーパッドは溝にはめて固定されているだけなので取り替えは簡単である。


まずは、購入したイヤーパッド
サードパーティからも安いものがいろいろと販売されているがここはSONY純正品。


交換前の様子。
表面の皮がボロボロととれてしまってとても汚い。
このまま装着するとひどいことになる。


イヤーパッドを外したところ。
写真だとわかりにくいけども、縁のところに溝があってそこにイヤーパッドをはめ込んでいく。


で、作業後。
ここまでで、全部で10分ほどで終わった。
おそらく、なれてくれば一瞬で終わる作業なのだろう。

新品同様の見た目になって満足。

情報処理安全確保支援士登録証がきた

4/1に発送とは聞いていたが、4/1に到着した。
書留で届いた。

届いたのは登録証と受講計画で受講計画としてはこれまで発表されていた内容から新しい情報はなく、本年度中にオンライン講習Cと集合講習。18年度にオンライン講習Aを19年度にオンライン講習Bを受講せよという内容であった。

講習の受講方法については別途メールで案内があるらしい。