geek.conf.2

あるエンジニアの備忘録

RedHat 認定エンジニア RHCE (RHEL7)

割と前ですが、RedHat 認定エンジニア 以下RHCEに合格しましたので
報告しますね。

RHCEとは、
・nmcliコマンドによる静的経路、パケットフィルタリング、ネットワークアドレス変換、チーミングの設定
・firewallコマンドによるネットワークポートのセキュリティ設定
・systemctlコマンドによるサービス/デーモンの制御
iSCSI イニシエーターの設定
・自動化のためのシェルスクリプト
・HTTP/HTTPSサーバ
NFS/SMBサーバ
SMTPサーバ
・NTP/DNS(unbound)サーバ
といったRHEL7の主要機能を一通り、実装することができるエンジニアとしてRedHatから認めてもらえる資格です。

本資格の取得にはRedHat認定システム管理者(RHCSA)を取得していることが必要条件です。

合格日:2017/03/31
点数:点数は伏せますがギリギリでした
勉強期間:2017/03/27 - 2017/03/30 (トレーニング受講期間)
勉強方法:
RedHat認定エンジニアトレーニングを受けて、その内容を全て理解します。

感想:
・試験時間は3.5時間あって全て実技試験です。
・資格取得にはトレーニングを受講した方が良いです。
・3.5時間て長いと思いますが、時間足りません。内容モリモリです。
・4日間のトレーニングは終わった後も毎日、復習を行いました。
・復習はVagrantで環境を整えて、何度も練習できるようにしました。
・RHEL7に未だ慣れていなかったのですが、慣れないと受かりません。
・なのでトレーニング受講の前にRHEL7に慣れておくことをオススメします。
・特にsystemctl、firewall、nmcliは押さえておくと良いと思います。

もう数年前から取りたかった資格の1つです。
Linuxを扱う人だったら取っておいた方が良いです。実技試験なのでLinuxサーバの構築はこの資格を持っているだけである程度証明されます。しかし難しかった。

Zabbixの日本語文字化けを解消する方法

ザビザビしてますか?僕です。

ZabbixのデータベースにMySQLを使っているのですが、ホスト名やトリガー名、ログ監視メッセージに日本語を使っていたら????????になっておりました。 Zabbix画面上では、メディアスクリプトに渡すアクションに登録した"メッセージ"も????????だし、ログ監視で抽出したログ内のログメッセージも????????となります。

これdefault character setがUTF8じゃないことからよく起こりうるので注意が必要です。特にAWSのRDSではlatin1がdefault character setなのでパラメータグループにてUTF8に適切に設定しましょう。 また、zabbix データベースを作成する際にはcharacter set utf8しましょう。

mysql> create database zabbix character set utf8;

んで、もうすでにlatin1で作ってしまった場合、これをUTF8に直す方法をこれから書きます。

まず、

mysql> show variables like 'char%';

mysql> show create table テーブル名;

でCharacter系パラメータがutf8じゃないことを確認します。utf8じゃなかったらまず今回の現象である可能性が高いです。 データベースやテーブルは以下のようにUTF8に変更しておきます。

mysql> alter database zabbix default character set utf8;
mysql> alter table テーブル名 ENGINE=MyISAM DEFAULT CHARSET=utf8;

ここからがUTF8に直す手順です。

  • zabbix serverの停止
# systemctl stop zabbix-server
  • mysqldump実行
# mysqldump -uroot -p -h RDSエンドポイント zabbix > zabbix.dump
# perl -pi -e 's/latin1/utf8/' zabbix.db
  • リストア実行
# mysql -uroot -p -h RDSエンドポイント zabbix < zabbix.dump
  • zabbix server起動
# systemctl start zabbix-server

これでOK。ちなみにあらかじめalter文でdatabaseもtableもutf8にしておけばリストア時にdrop databaseしなくても直ります。

Zabbix 3.0 認定プロフェッショナル

チェベックス! 僕です。
先日にZabbix 3.0 認定プロフェッショナルに合格したので以下にご報告いたします。

Zabbix 3.0 認定プロフェッショナルとは、Zabbixプロキシサーバーを使った分散監視や、仮想環境の監視、Zabbixサーバーの内部的な動作、ローレベルディスカバリー、パフォーマンスチューニングなど高度なZabbix技術について習得していることをZabbixに認定される資格です。
今回、本資格を取得するにあたり、Zabbix認定プロフェッショナルトレーニングを受講しました。トレーニング中に認定試験を受験します。

合格日:2016/12/09 
点数:88.57%
勉強期間:2016/12/08 - 2016/12/09 (トレーニング受講期間)
勉強方法:
Zabbix認定プロフェッショナルトレーニングを受けて、その内容を全て理解します。

トレーニングの情報を示します。

講師:福島さん
場所:NTTコム ソリューションズ
感想:
■ Day1

・ zabbixのyumインストールから。Linuxを操作できる人って希少なんですかね。
 アプリケーションはアイテムをグルーピングする。
 アイテム設定内の例外設定と定期設定について
 例外設定は更新間隔という設定値の例外の間隔で監視したり、しなかったりしたいときに利用する。
 定期設定はcron的に月、日、曜日を含める詳細なスケジューリング実行をしたいときに利用する。
 JMX監視の設定方法を教わる。現場では、UserParameterを使って、Javaメトリクスを取得するスクリプトを対象インスタンスで実行させていたりしている。
 isqlコマンド、、知らなんだ。
 ローダブルモジュールかぁ。なにか1個作ってみたい。
 ローレベルディスカバリは対象の種類も豊富で理解するには複雑なので、復習しましょう。
 VMwareにとても力を入れていたんですね。時代ですね。今後はDockerコンテナに力を入れてください。

 ■ Day2

 障害検知のフラッピングは運用あるあるなのでヒステリシスは効果的と思いまーす。

 forecastはまずはディスク監視で使ってみようかしら。
 zabbix Proxyも奥が深いっす。大規模NW環境のシステムだったら必要になるんでしょうね。
 インターネット経由の監視情報送付は割と議論になりやすかったので暗号化でFAとしたい。

 

試験はスペシャリストに比べるとやや簡単な印象でした。

 

zabbixは機能が本当に豊富ですね。分散監視とかVMware監視とか歴史情緒を感じます。そしてエンタープライズですね。痒いところに届きます。

なんだかんだでzabbixって色々な業種、会社で使われていて、ここいらで一発認定トレーニングを受けて知識を得るか、と思いスペシャリストからプロフェッショナルまでを受講しました。受講してみてzabbixデーモンが何をやっているかがわかりましたし、様々な運用監視のシーンでzabbix機能を使ったソリューションを提案、実装できるようになったと思います!

 認定スペシャリストを受講するともらえるポロシャツ

f:id:tsubauaaa:20161218002650j:plain width=

 

そして証書

f:id:tsubauaaa:20161218012821j:plain

 

 

 

 

Zabbix 3.0 認定スペシャリスト

色々と日々を過ごしている僕です。 はい。先日にZabbix 3.0 認定スペシャリストに合格したのでこちらにご報告いたします。

Zabbix 3.0 認定スペシャリストとは、Zabbix 3.0のすべての機能を網羅的に理解し、Zabbixの構築や運用に必要となるスキルを効率よく身につけていることをZabbixに認定される資格です。 今回、本資格を取得するにあたり、Zabbix認定スペシャリストトレーニングを受講しました。その情報も合わせて展開させてください。そのトレーニング中に認定試験を受験します。

合格日:2016/12/07
点数:90%
勉強期間:2016/12/05 - 2016/12/07 (トレーニング受講期間)
勉強方法:
Zabbix認定スペシャリストトレーニングを受けます。とにかく受けます。試験内容は言えませんが、思ったより難しかったです。
トレーニングの内容は以下に。

講師:福島さん
場所:NTTコム ソリューションズ
感想:
■ Day1

  • 喫煙所あり、トイレ個室2個、綺麗
  • 初っ端の演習zabbixのインストールは一度やったことある人だと退屈かも。
  • 福島さんがちょいちょい挿むzabbix情報の小ネタ、プライスレス。
  • zabbixのホスト作成、アイテム作成、を講師と一緒にやってみようのコーナー。
  • それぞれの設定パラメータの細かい仕様、Tipsを教えてくれる。これは本トレーニングじゃないと知りえないと思う。
  • パッシブ/アクティブチェックの違いとメリデメを理解できた。これデカい。
  • 3日目に認定試験があるが、Zabbix社のポリシー上、講師は試験についてアドバイスを言えないらしい。ただし、本トレーニングをすべて理解すれば合格するものとなっている。

■ Day2

  • zabbixはUIの操作性に癖があるが、効率的な操作を学んだ。
  • やはり細かい仕様、Tipsを紹介いただく。これらは実際に設定するケースを想定したアドバイスなのでとてもありがたい。
  • zabbixはきめ細かい監視ができることを実感。
  • zabbixで監視できる種類は豊富であることを実感。
  • これまでZabbixの70%も使えていなかったと感じる。

■ Day3

  • 権限とグループの紐付きについて理解。
  • グラフィカル3兄弟(カスタムグラフ/マップ/スクリーン)も丁寧に解説いただく。
  • ネットワークディスカバリはAWSインスタンスの削除時に利用するといいかも、と思った。今だとホスト上でOS停止時にAPIで無効化してたり、一定時間ホストが無効ならDeleted Groupに移動するスクリプトcronとかやってたりする。
  • 初めて触るITサービスなどw

Continue to Certified Professionals

Chefとテストフレームワーク

こんにちは、誕生した僕です。 5月に催されましたMicrosoftのイベントde:code 2016に参加してきまして、そこでなんとChef社のVP ジェームズ・ケーシーさんにChefSpecやInSpecといったChefを開発、運用するために必要なテストフレームワークについて教授いただきました。(2日目のセッションでね

ちょっとこの経験を僕なりに出力すべく、本ブログを書きたいと思います。 SQL Server 2014のChef レシピを作成し、InSpecで試験する、なんて方法を書きます。

レシピの説明

作成したSQL Server 2014のChefレシピを以下に貼ります。動作環境はWindows Server 2012 R2でございます。前提条件がありまして、.NET Framework 3.5が入っていて、WindowsファイアウォールSQL Serverアクセス許可されていることとなります。

recipe of sqlserver chef cookbook

以下、各リソースごと説明いたします。

  • powershell_script 'delete-install-directory'
    SQL Serverをインストールする前にインストール先のディレクトリが存在するとインストールに失敗するため、存在する場合は、Remove-Itemコマンドで削除します。

  • directory 'C:/temp/'
    workフォルダとでも言いましょうか。こちらを作成します。

  • template 'C:/temp/ConfigurationFile.ini'
    SQL ServerはConfigurationFileを指定してインストールできます。ConfigurationFileをtempフォルダに置きます。

  • powershell_script 'download-sqlserver-iso'
    SQL Server インストールファイルをtempフォルダにダウンロードします。

  • powershell_script 'mount-iso-file'
    ダウンロードしたSQL Server インストールファイルを指定してISOマウントします。

  • powershell_script 'install-sqlserver'
    マウントした場合のボリューム名をattributesに登録しておき、そのボリューム名をマウントするドライブレターを取得します。 そのドライブレターに移動し、インストールします。インストールにはattributesに登録された、SQL ServerサービスアカウントのパスワードとSQL Server システムAdminアカウントのパスワードとConfigurationFileを指定し、ライセンスアグリーメントのため/IACCEPTSQLSERVERLICENSETERMSを有効にしてインストールを実行します。

  • powershell_script 'dismount-iso-file'
    インストール完了後、ISOマウントしたディスクをアンマウントします。

  • powershell_script 'delete-iso-file'
    最後にSQL Server インストールファイルをインスタンスから削除します。

RubocopとFoodcriticで静的解析

このレシピやテストコードを作成するにあたり、RubocopやFoodcriticを利用しています。 具体的には、Atom editorのプラグインで利用しています。 RubocopはChefというよりかはrubyの構文を見てくれます。

f:id:tsubauaaa:20160613160849p:plain ※この例ではダブルクォーテよりもシングルクォーテの方が好き、と言われています。

Foodcritic(料理評論家)はChefの構文に特化して評論してくれます。

f:id:tsubauaaa:20160613161229p:plain ※評論の内容はこちらにあります↓

http://www.foodcritic.io/

このように静的解析を行いながら開発することで質と開発スピードを両立することができます。

ChefSpecでユニットテスト

ChefSpecでChefレシピをユニットテストします。以下に作成したレシピをテストするspecファイルを貼りますね。

spec file of sqlserver chef cookbook

以下、簡単に説明します。

  • describe 'sqlserver::default'
    レシピsqlserver::defaultの各リソースすべてについてテストします。

  • before
    テスト実施前の前提条件をここで設定しています。ここでは、レシピ内で使用するnot_ifのコマンド結果をfalseと設定しています。

  • it ' **** '
    各リソースごとit内にテストを記述します。

    • allow(File).to receive(:exist?).and_return(true)
      リソース内にonly_ifがある場合、その条件をtrueとし、テストします。

これを実行するとこんな感じです。
$ chef exec rspec default_spec.rb f:id:tsubauaaa:20160613164810p:plain

レシピを作る前にspecファイルを作ってテストがパスするようにレシピを作るとテスト駆動でCookbookを開発できますね。

レシピ実行

レシピを実行します。@WIndows Server 2012 R2
PS > chef-client -z -c client.rb -j windows.json

  • localモード(-z)
    Cookbook、client.rb、windows.jsonを用意して、localモードで実行します。

  • client.rb
    Cache、Cookbook、logレベルを定義しています。

  • windows.json
    run_listを定義しています。

f:id:tsubauaaa:20160613192949p:plain

例では、C:/tempフォルダにSQL Server インストールファイルをあらかじめダウンロードしていますので、30分ほどで完了しました。 f:id:tsubauaaa:20160613200150p:plain

InSpecでインテグレーションテスト

InSpecでインテグレーションテストを行います。InSpecはInfrastructure Specificationの略のようです。 InSpecはSSHだったりWinRMだったりDockerだったりに対してリモートに実行することも可能ですが、今回はWindows Server 2012R2ローカルで実行します。

WindowsでInSpecを実行する準備

  • rubyのインストール
  • ruby Development Kitのインストール
    • c:/devkitにruby Development Kitを解凍
    • c:/devkit/config.ymlに- C:\Ruby22-x64を追記(これはRubyのインストール先)
    • cd c:/devkit
    • ruby dk.rb init
    • ruby dk.rb install
  • InSpecのインストール
    • gem install inspec

InSpecファイルの説明

以下にInSpecファイルを貼ります。

inspec file of sqlserver chef cookbook

主にインストールされたであろうサービスを確認しています。簡単に説明しますね。

  • impact
    InSpecはチームでテスト結果を共有することを強調しています。まぁ優先度ですね。

  • title and desc(ription
    こちらもチーム共有のための付帯情報です。

まとめ

FoodcriticやChefSpecは以前から気になっていました。InSpecはde:code 2016で知りました。
一連のChefレシピ開発を推進するツールは十分揃っていてWindowsでも"使える"ことが確認できました。

Windowsと自動化ってまだまだ色眼鏡で見られがちですが、MicrosoftOSS活動と同様に自動化ツール界隈も加速しています。
Windows as a Codeに乗り遅れるな!!

コードと参考文献

紹介したコードはこちらにございます。

github.com

そしてSQL Server 2014のレシピを作成するにあたり、こちらの記事を参考にさせていただきました。

www.systemcentercentral.com

スターティングGo言語を読んで

GW最後の僕です。

本日はこちらの書籍を読んだので感想を書きます。

スターティングGo言語 (CodeZine BOOKS)

スターティングGo言語 (CodeZine BOOKS)

 

 僕のプログラミング経験はJavaを昔にちょろっとstrutsで業務アプリケーションを開発した程度。あとはPerlでバックアップとかファイルを複数サーバに配布したりするスクリプトを書いていたり、RubyAWSやCloudStackのAPI操作をしている程度の経験です。

Go言語は約一ヶ月前から勉強していて某監視サービスのプラグインを書いてみたり、その監視サービスのWebhooks先のWebアプリケーションを書いてみたりしている程度です。

さて、それでは感想を以下、箇条書きで。

 

・Go開発環境の説明あり。まぁサクッと流し読み。

・Go言語はオブジェクト指向でなかったり、クラスがなかったり、継承概念がなかったり、コンパイラが厳格だったり、と他プログラミング言語とは違った特色があります。この特色にはGo言語が主張するメリットがあります。ここら辺について丁寧に解説されていて理解できました。

演算子、制御構文、変数/関数定義といったプログラミング紹介書籍には必ずあるこれらの説明ですが、本書にももちろんあります。流し読み、そして写経。

・Go言語では構造体とインターフェースが重要な要素となります。本書の購入はこちらの理解をさらに深めたいのが、一番の目的でした。結果、理解を深められましたが、もう少し、深く、量も多く割いていただけると良かったな、と感じます。

・Goパッケージの紹介。実例を基に紹介。こちら写経。

 

まとめ

僕のようなGo言語初心者は目を通して、写経することでGo言語の理解がさらに深まると思います。また、箇条書きした通り、本書を読んで、Go言語の思想を理解し、Go言語の書き方に対して納得できたと感じます。

 

それではまた

 

Oracle 11gを実行するDockerコンテナをRUN

こんばんは。あらかじめ決められた僕です。
Infrastructure as a codeなツールを勉強するときはOracle11gで試す癖があります。
今回は、Oracle11gを実行するDockerコンテナを作りましたので共有します。

いきなり以下にDockerfileを貼ります。

Dockerfile for run Oracle11g

1: OSイメージはOracle Linux 6を使用
4-6:Oracleのユーザグループを作成
7-8:Oracleのユーザ作成とパスワード設定
9-10:Oracleユーザにグループを設定
11-13:ORACLE_HOME、ORACLE_BASE、インベントリー用のディレクトリをmkdr
14:Oracleデータベース用のテンプレートをCOPY
15:Oracle用ディレクトリすべてをOracleユーザの所有に設定
16:Oracle11gに必要なパッケージをyumインストール
17:Oracleに必要なカーネルパラメータが設定されたsysctl.confをCOPY
18:Oracle11gのインストールdisk1とdisk2を解凍して2つとも同じディレクトリに入れたdatabaseディレクトリをCOPY
19-20:databaseディレクトリの所有者をOracleユーザにして実行権限を付与
22-23:Oracleユーザでdatabaseディレクトリに移動
24-26:サイレントモードでrunInstaller
COPYしたdatabaseディレクトリにOracle11gインストール用の応答ファイルdb_install.rspを準備しておく
27-28:rootユーザでroot.shを実行
30:Oracle環境変数をexportするため.bash_profileをOracleユーザのホームディレクトリ直下にCOPY
ADDとCOPYだけど、ADDは解凍機能を持つので、解凍する場合に使う。単なるファイル置くだけならCOPYを使ってます。
31:Listenerとデータベースを設定するためのスクリプトoracle.shをCOPY
32:Oracleユーザのホームディレクトリ以下をOracleユーザ所有に設定
34:Listenerポートを外部に公開
35-36:OracleユーザでOracleホームディレクトリに移動
37:oracle.shを実行

よっしゃ。Dockerfileを作成したらbuildしましょう。
$ docker build -t "tsubauaaa/oracle-docker" .
割と時間かかりますが、buildが完了するとoraclelinuxとtsubauaaa/oracle-dockerの2つイメージが出来上がります。

それではRUNしたいのですが、このイメージを実行するとoracle.shが実行されます。oracle.shでは

  • .bash_oracleを読み込んでOracle環境変数をexport
  • listener.oraを作成
  • Listenerを開始
  • dbcaにOracleデータベース用テンプレートdb_create.dbtを指定してデータベース作成
  • Alertログをtail

をやります。

$ docker run -p 1521:1521 --ipc=host --name oracle-docker --hostname oracle-docker tsubauaaa/oracle-docker

コンテナを停止するとデータベースのデータは消えます。
こちらにDockerfileとかoracle.shといった関連ファイルを置いています。

github.com

こちらのサイトを参考にさせていただきました。

Installing the Oracle database in docker | Frits Hoogland Weblog

おしまい