groongaとmecabのインストールまずgroongaとmecabをインストールします。yumリポジトリを登録し、必要なものをインストールします。wgetmysqlのインストールyumを使った場合mroongaはmysql5.1を前提とするようです。ここではmysql5.5を使用したいのでソースからインストールします。適当に設定ファイルを用意します。2M[mysqlhotcopy]interactive-timeoutmysqlの起動mysqlユーザーの作成と、起動スクリプトのコピー、DBの初期化を行い、mysqlにパスを通して起動します。startmroongaのインストールここでmroongaをソースからビルドします。configureオプションで、mysqlのソースを指定します。installmysqlへのmroongaエンジンのインストールプラグインのインストールを行い、いくつかの関数を登録します。'ha_mroonga.so';これでひと通りのインストールが完了しました。enginesにmroongaが含まれていれば成功です。確認それでは簡単に触ってみます。testデータベースにblogテーブルをつくってみます。ここでは自分のグログ記事の抜粋をtextカラムにいれておきます。Intelligence)ツールを利用することが多いようです。エンジニアの観点からすると複雑なSQLを書くだけでいいかもしれませんが、経営者などの立場からするとBIツールなどを使って画面上でポチポチやって分析できることが重要なようです。今回はそのBIツールの中で、Redshiftにいち早く対応しているJaspersoftという製品を使ってRedshiftに接続してみたいと思います。("久しぶりにnagiosの話題です。アプリログ内容の監視の仕方には様々な要件がありますが、特定の間隔でログを監視し「error」などの文言があったらアラートする。あるケースで、以前の記事にも書きました。その逆に、例えば、多量のアクセスがあるにも関わらず頻繁に出力されるはずの重要なキーワードがでていない場合は、不測の事態がおこっているかも知れません。今回は特定の間隔でログを監視し、その中にキーワードが含まれていなかったらアラートするというものです。("S3のwebホスティングで、ログ出力の設定をしていた場合、ログファイルが大量に出力されます。ログの記録時間は標準時で出力されていてわかりづらいです。今回はEMRのHiveを利用して、日本時間の0時〜翌日の0時までのログを1ファイルにまとめてみたいと思います。("久しぶりのSpiderの話題です。今回はtpcc-mysqlというベンチマークツールを使ってSpiderのベンチマークをとってみました。mysqlにかぎらずDBのベンチマークツールの多くは、TPCという団体の定めたベンチマーク仕様に基いて実装されていて、トランザクションやアクセスなどのDB用途によっていくつかのベンチマークタイプに分かれていて、OLTP向けのTPC-Eや意思決定システム向けのTPC-HやTPC-DSなど色々あるようです。");そして、「ログ」を含むレコードを探してみます。久しぶりにnagiosの話題です。アプリログ内容の監視の仕方には様々な要件がありますが、特定の間隔でログを監視し「error」などの文言があったらアラートする。あるケースで、以前の記事にも書きました。その逆に、例えば、多量のアクセスがあるにも関わらず頻繁に出力されるはずの重要なキーワードがでていない場合は、不測の事態がおこっているかも知れません。今回は特定の間隔でログを監視し、その中にキーワードが含まれていなかったらアラートするというものです。S3のwebホスティングで、ログ出力の設定をしていた場合、ログファイルが大量に出力されます。ログの記録時間は標準時で出力されていてわかりづらいです。今回はEMRのHiveを利用して、日本時間の0時〜翌日の0時までのログを1ファイルにまとめてみたいと思います。specifiedmysql>検索が成功したようです。次に検索スコアを出してみます。デフォルトでは自然言語検索によるスコアのようです。sec)また、「ログ」と「アクセス」が含まれるレコードの検索をしてみます。sec)マッチ度がスコアで取得されるので、ソートをすることもできます。sec)ざっとさわりでしたが、mroongaを試してみました。パフォーマンスやクエリの用法などはまたの機会に調べてみます。FTSというInnoDBでの全文検索が可能なようですが、こちらは参照は速いものの更新はmroongaの方が速いという結果も出ているようなので、こちらも機会があれば調べてみたいと思います。http://www.slideshare.net/y-ken/my-sql-56innodb-fts以上です。mysql2013年5月15日水曜日logrotateってなんじゃ?(pigzで高速ローテート)大量アクセスがあってログファイルが巨大であったりすると、日々のlogrotateが重くなります。対象ディレクトリ以下に大量のファイルがある場合も時間がかかることがありますが、その場合はローテションの世代数を減らしたり、対象ディレクトリから定期的に退避すれば済むため、ネックになるのは主に圧縮によるものだと思います。デフォルトではgzipが利用されますが、別の圧縮プログラムを利用することもできます。圧縮プログラムの選定ですが、基本的に圧縮率の高いプログラムは時間がかかりますし、高速なものは圧縮率が低いものが一般的ですが、例外があります。gzipなどはシングルコアしか使用しませんが、マルチコアで分散処理する圧縮プログラムだとおなじ圧縮フォーマットでも格段に速くなります。今回は、その例としてpigzを利用してみます。pigzは、gzipフォーマットの圧縮をマルチコアで行う高速gzipとして動作します。pigzで圧縮したファイルはgunzipで解凍できるので、pigzの無い環境にもファイルを持っていくことができます。それでは早速触ってみます。複数のCPUがあるマシンでないと意味が無いので、コア数を確認します。7今回はc1.xlargeですので、8コアです。pigzをダウンロードして、ビルドします。1なんかエラーが出ました。リンクが張られていないようなので、Makefileで-lmオプションをつけます。-lmもう一度ビルドします。zopflipigzとunpigzが出力されていたら成功です。この2つのプログラムをパスの通っているところに置きます。/usr/local/bin/それでは実際に、動かしてみます。1GBのファイルを作ります。test.logそして、gzipでの圧縮/非圧縮と、pigzでの圧縮/非圧縮で時間とCPU使用率を見てみます。0.0%stおお、だいぶ速くなったようです。複数のCPUが使われていることも分かります。次はこれをlogrotateで利用してみます。コメント付きの部分が圧縮プログラムの設定になります。全体的に適用したい場合は、/etc/logrotate.confに記述します。endscript}httpdのログファイルを作って、時刻をローテーションの時間に合わせます。03:00:00"しばらくすると、きちんとローテーションされていることがわかります。error_log-20130516.gzマルチコア環境に限りますが、これでローテーションが軽くなります。negateでログに特定のキーワードが含まれていなかったらアラート)久しぶりにnagiosの話題です。アプリログ内容の監視の仕方には様々な要件がありますが、特定の間隔でログを監視し「error」などの文言があったらアラートする。あるケースで、以前の記事にも書きました。その逆に、例えば、多量のアクセスがあるにも関わらず頻繁に出力されるはずの重要なキーワードがでていない場合は、不測の事態がおこっているかも知れません。今回は特定の間隔でログを監視し、その中にキーワードが含まれていなかったらアラートするというものです。check_log3の利用まずは普通にcheck_log3の設定をします。Nagiosサーバー側に、以下の設定をします。3分間隔でチェックし、キーワード「hoge」が一つでも含まれていたらCRITICALを出します。今回はWARNINGは出さないので、WARNINGの閾値をとても大きな数値にしておきます。1}すると、キーワードが含まれている場合は、キーワードが含まれていない場合は、のようになります。次に、これの逆をやってみます。nagiosにはnegateというプラグインがあり、CRITICALとOKの評価を反転します。このプラグインを使用して、評価反転用のcheck_nrpeコマンドを定義します。1}すると、キーワードが含まれている場合は、キーワードが含まれていない場合は、のようになり、結果が反転します。nrpeでなくても、どのプラグインでもnegateと組み合わせることができるので、ちょっとした工夫が必要なときにはとても便利です。Intelligence)ツールを利用することが多いようです。エンジニアの観点からすると複雑なSQLを書くだけでいいかもしれませんが、経営者などの立場からするとBIツールなどを使って画面上でポチポチやって分析できることが重要なようです。今回はそのBIツールの中で、Redshiftにいち早く対応しているJaspersoftという製品を使ってRedshiftに接続してみたいと思います。起動とログインRedshiftとRDSに対応してあるバージョンのJaspersoftのAMIがマーケットプレイスにあるので、それを購入します。AWShttps://aws.amazon.com/marketplace/pp/B00B527JQ0このAMIはインスタンスのランニングコスト以外にもソフトウェアの使用料金が時間単位で掛かります。ここでは、RedshiftのあるUSのリージョンで起動します。AWSコンソールのページが開き、インスタンス起動のウィザードが実行されます。Redshiftと同じゾーンを選択します。今回はm1.mediumのサイズで立ちあげます。ここではルートボリュームを100GBにします。セキュリティグループではSSHとHTTPをあけておきます。起動させたあと、このインスタンスのPublicDNSまたはEIPに対してローカルのブラウザからアクセスしてみます。すると、jasperサーバーの初期画面が表示されるので、「Login」をクリックします。すると、ログイン画面が表示されます。「ログインのお手伝いが必要ですか」というリンクをクリックすると、下図のように初期のID、パスワードが表示されます。ここではsuperuserでログインしてみます。すると、新しいパスワードを要求されるので、好きなパスワードを設定して改めてログインします。これでログインすることが出来ました。これがJasperサーバーのホーム画面のようです。次に、データソースを作成します。ここでいうデータソースとは、データがある場所をしめします。データベースの場合やファイルの場合などがあり、ここではRedshiftをデータソースとして登録します。Source」を選択します。Source」を選択します。Source」でRedshiftを選択しても接続できます。次にドメインを作成します。ドメインとはビューに渡すデータセットに当たります。データソースからデータを選別してビューに渡すために整理した状態にします。ドメイン」を選択します。ドメイン作成画面では、ドメイン名と作成したドメインの保存場所を適当に入力します。データソースには先ほど作成したRedshiftのデータソースを選択します。ドメインデザイナのリンクをクリックします。すると、ドメインデザイナが開き、データソースの「テーブル」タブが表示されます。ここで、「>」ボタンなどで使用するテーブルを右側の枠に持っていきます。複数のテーブルを結合(Join)できたり、フィルタ(Where)をかけられたりなどといったことができます。ドメインというのはGUIでつくるSQL、つまりクエリビルダのようなものです。最後の「表示」タブでは、このようにして作ったデータセットに対して、レポート表示時のラベルをつけれたりできます。「OK」を押すと、ドメインにこの設定が保存されます。ドメイン作成画面に戻り、「送信」を押すとこのドメインが作成されます。次にアドホックビューを作成します。アドホックビューは、レポート用の様々なタイプのビューで、グラフなどを作成できます。アドホックビューでは最初に、入力ソースを選択します。ここでは、さきほど作成したドメインを選択します。次に、ドメインに含まれるフィールドを選定します。使用するフィールドを右側に移動し、下部のボタンから、テーブルやグラフなど表示タイプのボタンを押します。今回は「グラフ」のボタンを押します。すると、UIデザインの画面が開きます。ここで、左側の「フィールド」と「メジャー」から中央上部の「列」や「行」に適用する項目をドラッグします。Analyticsでカスタムレポートに指標やディメンションを追加するのに似ています。行にcntをセットして、右側のデータラベルを右側にスライドします。すると以下のようにグラフが自動で作成されます。グラフのタイプを変更するには、グラフ左上の歯車アイコンをクリックして、変更します。保存する場合は、中央ツールバーのディスクアイコンで保存します。次に、レポートを作成します。レポートは基本的に、アドホックビューを選択するだけです。レポート作成画面でもグラフのタイプを変更することができます。ツールバーのディスクアイコンでレポートを保存します。最後はダッシュボードです。ダッシュボードの作成画面では、複数のレポートを貼り付けたり、コントロールを貼り付けたりして帳票としての全体的な画面をつくります。作成されたダッシュボードは以下のようになります。このように、DBの知識がほとんどなくてもいろいろなデータの見た目をプリセットで整えて、手軽に更新、確認できるのがBIツールの役目のようです。まとめJaspersoftを使ってみた感覚としては、独特のコンポーネントにつけられた用語や意味を把握するのに少し戸惑いますが、慣れてしまうとそれなりに直感的に操作ができます。異なるデータソースのデータ同士をJoinできるかと思ったのですが、やりかたがわかりませんでした。その場合は、RedshiftにインポートしてRedshiftデータソースとして、ドメイン内でJoinしてしまえばよいかなと思います。redshift2013年5月1日水曜日Redshiftってなんじゃ?遅ればせながらAWSのRedshiftというサービスの話題です。Redshiftはデータウェアハウス(DWH)をサービスにしたものです。DWHというのは平たく言うと、専用ツールなどを使って様々な角度で分析するためのあらゆるデータの集まりです。各所に分散している様々なデータを統合して関連付け、見えない傾向や状況などを知ることでビジネスの意思決定(ビジネスインテリジェンス:BIというそうです。)をしやすくするために用いられるようです。DWHでは直接関わりあいのない業務同士のデータも関連付けに利用されたり、過去との比較も重要な分析になるため、通常のデータベースよりも巨大になります。従来のDWHでは、専用のハードウェアとソフトウェアを利用するため高価でしたが、Redshiftが出たことによりはるかに安価で気軽に利用することが出来るようになりました。これだとふわふわしすぎていてよくわからないので、ちょっとずつ触ってみて勉強していきたいと思います。Redshiftは、いってみればAWSが提供している巨大なPostgreSQLベースのクラスタです。たくさんのデータを集計しやすいDBだと思ってまずは触ってみます。AWSコンソールでRedshiftの画面を開いてみます。Cluster」をクリックします。Cluster名やデータベース名などを適当に入力します。クラスタの各ノードのインスタンスタイプとノード数を設定します。最低2ノードからになります。今回は2ノードにします。パラメータグループやセキュリティグループ、VPCに入れるかなどを設定します。今回は全部デフォルトで済まします。Cluster」をクリックします。クラスタ一覧にいま作成したクラスタが表示されました。ステータスをみるとcreatingとなっているので、準備中なのでしょう。すると、availableに変わりました。これで使えるようです。クラスタ名のリンクをクリックしてみます。すると詳細情報が開きます。接続エンドポイントやJDBC,ODBCの接続子などが表示されています。Groupsで、defaultグループにアクセス可能なIPを設定しておきます。今回は、専用ツールなどは利用せず、psqlでこのエンドポイントに直接接続してみます。help.myfirstdwh=#接続できました。通常のpostgreSQLとRedshiftのpostgreSQLインターフェースの違いは以下のようになっているそうです。TABLEにおいてsortとdistributionアルゴリズムを定義することができます。TABLEステートメントにつき1カラムだけ指定できます.COPYRedshiftではS3バケットとDynamoDBから自動圧縮してデータをロードするために特別にカスタマイズされています。DELETEWITHは未サポートですVACUUMVACUUMのパラメータはpostgreSQLとRedshiftではまったく異なります。今回は試しに、日本の郵便番号データを投入してみます。以下のサイトからダウンロードした全国一括の郵便番号CSVファイルをS3にアップします。現段階で、Redshiftは同一リージョンのS3でないとロードできないため、USリージョンのバケットに配置します。次に、このCSVのフォーマットに合わせてテーブルを作成します。smallint);そしてデータをロードします。ロードにはCOPYコマンドを利用します。文字列はダブルクォーテーションで囲われているので、REMOVEQUOTES句を利用します。S3バケットへのアクセスにはCREDENTIALS句を利用して、AWSアクセスキーとシークレットキーを指定します。REMOVEQUOTES;COPYロードに成功した場合はCOPYと表示されます。ロードに失敗した場合は詳細ログがstl_load_errorsテーブルに出力されるので、SELECTなどして確認します。'KEN_ALL.CSV';データの投入が終わったので、集計などしてみます。row)このように集計できました。今回は手元のマシンからのアクセスで、データ数も少ないため、パフォーマンス面での性能はまだわかりませんが、psqlで接続できるのはとても手軽です。今後もいろいろ触って試してみたくなりました。