Espress 6.6 update 27 リリースノート

Espress製品(EspressChart/Reort/Report ES/Dashboard)の最新版6.6 update 27での修正内容です。

  • 数式のパラメータを設定する際の、データ型の比較における厳密さを減らしました。
  • ラベルを式に変換する際に改行を正しく処理するように修正しました。
  • エクセルエクスポートにおけるフォントサイズ計算を改善しました。
  • Java 8におけるパラメータドロップダウンを開く際の問題を修正しました。
  • エクセルレポートにおける無効な数式の値の問題を修正しました。
  • XMLデータソースの後方互換性を修正しました。
  • レポートのセル形式が失われる可能性のある問題を修正しました。
  • 3D円グラフが複数回エクスポートされた場合、位置が変更さる問題を修正しました。
  • スケジュールジョブのパラメータセットを作成する際にパラメータダイアログを表示できない問題を修正しました。
  • エクスポートされたPDFの透明な背景画像に関する問題を修正しました。
  • ダッシュボードドリルダウンのマップに関する問題を修正しました。
  • パラメータ共有に関する問題を修正しました。
  • その他いくつかの不具合修正

Espress 6.6 update 26 リリースノート

Espress製品(EspressChart/Reort/Report ES/Dashboard)の最新版6.6 update 26をリリースしました。

・ダッシュボード内のパラメータ列でSQLの結果がマッピングされたパラメータを使用することができるようにしました。
・EMSMessageServletリクエストにHTTPヘッダを余分に追加できるようにしました。
・XMLデータソース内の欠落データの問題を修正しました。
・ダッシュボード内のパラメータがリフレッシュする問題を修正しました
・上書きコーディネイトファイルダイアログのタイトルを修正しました。
・PDFエクスポートで画像の透明部分が黒になる問題を修正しました。
・バックアップデータを使用する場合にデータベースにアクセスしようとするスクリプトを修正しました。
・Wildflyアプリケーション・サーバー上のクエリデザイナのデフォルトのクエリの状態を修正しました。
・その他いくつかの不具合修正

Espress 6.6 update 25 リリースノート

Espress製品(EspressChart/Reort/Report ES/Dashboard)の最新版6.6 update 25をリリースしました。

・パフォーマンスを向上させるため、ダッシュボードでチャートドリルダウンを追加したときにセキュリティレベルをキャッシュします。

・SQL結果セットにマッピングされたパラメータ付きのレポートを開くときのパフォーマンスを向上させました。

・QuickDesignerでSet FontダイアログでOKボタンを押したときの問題を修正しました。

・Wildflyアプリケーションサーバ上でJava Web Startを使ってOrganizerを開始するときの問題を修正しました。

・Excelエクスポートでスクリプトを使ってレポートセルを隠せない時の問題を修正しました。

・Excelエクスポートでグループヘッダーのロゴが失われている問題を修正しました。

・チャートからのダッシュボードリンクがバックアップデータを使っているときの問題を修正しました。

・失われたXMLデータソースノードが前後の値に置き換えられているときの問題を修正しました。

・HTMLレポートタイトルのXSS脆弱性を修正しました。

・JSPファイルがアップロードできる脆弱性を修正しました。

Espress 6.6 update 24 リリースノート

Espress製品(EspressChart/Reort/Report ES/Dashboard)の最新版6.6 update 24をリリースしました。

・マップビルダーの翻訳が可能になりました。
・ダッシュボードパラメータ列でのタイムスタンプをサポートしました。
・保存していない変更がある状態でSQLエディタから出ようとしたときに保存プロンプトを出すようにしました。
・生成されたレポート・チャートのURLでパラメータプロンプトに対しカスタムした日付フォーマットのサポートを追加しました。
・動的SVGマップのパック化をサポートしました。
・ユーザのセキュリティレベルを設定するAPIを追加しました。
・MySQL JDBCドライバをアップグレードしました。
・SQLクエリで複数のORDER BYを使ったときのレポートのパフォーマンスを改善しました。
・エンドユーザーログレポートはadminを含めないようになりました。
・ダッシュボードの共有パラメータダイアログの幅を大きくしました。
・ダッシュボードをアンパックしたとき、ダッシュボードの不正なドリルダウンリンクを、自動的に修正するようにしました。
・セキュリティレベルはSVGマップからドリルダウンをレポートするときにも適用されます。
・エクスポートしたCSVレポートで引用文字列があったときの問題を修正しました。
・ファイルロックでの問題を修正しました。
・ダッシュボードでタイムスタンプ検証メッセージが二度表示されていた問題を修正しました。
・Published Filesからドリルダウンチャートをエクスポートする際の問題を修正しました。
・ダッシュボードドリルダウンでSVGマップでの凡例の位置が誤っていたのを修正しました。
・マップディレクトリパスがアンダースコアを含んでいたときの、動的SVGマップでの問題を修正しました。
・翻訳に関連した複数の不具合を修正しました。
・その他いくつかの不具合修正

統計解析向けR言語: EspressChartの連携でデータを簡単に可視化を実現 : JRI (Java R Interface) 事例

R言語は、オープンソースでフリーソフトウェアの統計解析向けプログラミング言語、及びその開発実行環境です。R言語は「ベクトル処理」と呼ばれる実行機構により、柔軟な処理を簡便な記法で実現します。

世界中のRユーザが開発した膨大なRプログラム(パッケージ)が「CRAN」として配布用の形式に保存されています。そのCRANパッケージ数の飛躍的な増大に見られるとおり、統計学を超えて学問分野や業界を問わず、金融工学・時系列分析・機械学習・データマイニング・バイオインフォマティクスなど、柔軟なデータ解析や視覚化そして知識共有の需要に応えうるR言語の普及は世界的に広がっています。

データのグラフ(チャート)・図解化機能はありますが、グラフ画像出力はシンプルなものしかありません。

●JavaとR言語のインターフェイス方法

Javaのようなハイレベルなアプリケーションは直接Rオブジェクトにアクセスできません。JRI (Java R Interface)というソフトを使用することでJavaからRオブジェクトへのアクセスが可能となります。これを使用してJRIクラスをjavaクラスにインポートします。

JRIインターフェイスを使用してラインチャートの描画方法(一部):

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.rosuda.JRI.Rengine;

public class LineChart{
public static void main(String[] args) throws IOException
{
//Set some labels for the plot
//Start R
Rengine r = new Rengine(args, false, null);
//Do some calcs and plot the chart but save as a png in the working folder
r.eval(“data(cars)”);
r.eval(“plot(cars, main = \”lowess(cars)\”)”);
r.eval(“lines(lowess(cars), col = 2)”);
r.eval(“lines(lowess(cars, f = 0.2), col = 3)”);
r.eval(“legend(5, 120, c(paste(\”f = \”, c(\”2/3\”, \”.2\”))), lty = 1, col = 2:3)”);
r.eval(“png(file=\”LineChart.png\”,width=800,height=600)”);
r.eval(“dev.off()”);

(以下省略)

図1

●EspressChartとR言語との融合

EspressChartは高度で、豊富なチャートを作成するためのAPIを提供します。一方R言語は統計分析用の機能構築を提供します。EspressChartはデータ分析にR言語を使用し、それを高度なチャートへ展開することが可能です。

パイ・チャートのサンプル・プログラム例:

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.rosuda.JRI.REXP;
import org.rosuda.JRI.Rengine;

(中略)

QbChart.setEspressManagerUsed(false);
QbChart chart=new QbChart((Applet)null,QbChart.VIEW2D,IChartTypeConstants.PIE,data,false,colinfo,null);

(以下省略)

図2 EspressChartでのパイチャート出力

結論:
ユーザはR言語を使用することで統計分析、データマイニングに必要な機能をコーディング数を削減して可能とします。さらにEspressChartを活用することで、高品質・高機能なチャート(グラフ)を簡単にWebアプリケーションに展開することが可能となります。

タグ: , , , , , ,

ERES + Fluentd かんたんログ活用術 – その④ EspressReport ESによる可視化

ERES+Fluentd
EspressReport ES(ERES) + Fluentd かんたんログ活用術の第5弾です。ここまでの記事でログ情報をDBに出力しました。最後にログの活用術としてログの可視化に挑戦します。可視化するために使用するのが弊社取扱い製品のERESです。
※参考:ERESサンプルサイト

ERESは100%JAVA対応で、グラフ・レポート・ダッシュボードの作成から配信までを行えるツールです。今回はチャート機能を使用して、DBMotoのhistoryログをグラフとして可視化します。
※インストール方法や大まかな使い方は弊社HPのカタログ・技術資料に記載があります。

それでは、早速チャートを作ってみます。

まずは、データソースとなるDBをERESに登録し、DBからチャートとして使用するデータを取得します。
e+f_13

取得の方法には、SQLクエリによるものと、GUIによるものの2種類があります。今回はSQLクエリを使ってデータを取得しています。
e+f_14

次の図が取得したデータです。レプリケーションが行われたタイムスタンプ(time)とセッションの種類(session)、セッションにかかった時間(session_time)、レプリケーションされたレコードの件数(total)を取得しています。
e+f_15

これらのデータを使ってチャートを作成します。ウィザードに沿って進めていくことで、チャートの形は作れますので、どの部分にどのデータを割り当てるかを設定することで、目的に沿ったチャートを作成することができます。
e+f_16

このチャートを見れば、何時に何件のレコードがソースDBからターゲットDBへレプリケーションされたのかが一目でわかります。

このようにログ収集ミドルウェアのFluentdとデータの可視化ツールのERESを組合せることで、ログ情報を扱いやすい形に整形、可視化することができ、活用の幅が広がっていくでしょう。

用途に沿って、ERES以外のEspress製品シリーズを使用して同様にFluentdト連携してログデータの可視化を構築することができます。

タグ: , , , , ,

ERES + Fluentd かんたんログ活用術 – その③ フィルタリング

ERES + Fluentd かんたんログ活用術の第4弾です。前回の記事では、DBへの出力を行いました。今回はフィルタリング機能についてご紹介します。

DBMotoは一定のインターバル(デフォルト1分)ごとに更新を検知して、ターゲットDBへ反映しています。そして、historyログにはこのインターバルごとにログが追記されるわけですが、各インターバルで毎回、ソースDBに更新があるとは限りません。むしろ更新が「0」件のインターバルの方が多いでしょう。そうなると、更新が「0」件のログに、実際に更新があった時のログが埋もれて、必要な情報を見逃してしまうかもしれません。そこで、今回は更新が「0」件のログは除外して、更新があったインターバルのログのみをDBに出力するようにフィルタリングを行ってみます。

e+f_11

フィルタリングの条件はstatusが「Info」で、totalが「0」のものとします。statusはインターバルが正常終了した場合に「Info」となり、異常終了した場合に「Err」となるので、正常終了したものを対象とします。そして、totalはターゲットDBへの反映に成功した件数(success)と失敗した件数(fail)を足したもの、つまり更新があった件数を表していますので、これが「0」件のものを対象とします。つまり、statusが「Info」かつtotalが「0」でないものをDBへ出力します。

この条件でフィルタリングを行えるプラグインを探したところ、ignoreというプラグインがありましたので、これを利用します。では、早速インストールします。

/usr/sbin/td-agent-gem install fluent-plugin-ignore-filter

 

インストールが完了したら、設定ファイルにフィルターを追加します。

<source>
type forward
</source><filter dbmoto.history>
type ignore
regexp1 status Info
regexp2 total ^0
</filter><match dbmoto.history>
type pgjson
~~~~~
</match>

 

使い方としては、regexp1, regexp2のすべてにマッチしたものを除外します。この記述ではstatusが「Info」かつtotalが「^0」のものを除外しています。「^0」は正規表現で、行頭が0のものを表しています。

設定ファイルを編集したらサービスを再起動して、反映させます。

$ /etc/init.d/td-agent restart

 

そして、フィルタリングが有効になった結果が下の図です。更新がないログについては、出力されていません。このようにフィルタリングを行うことで、必要なログ情報のみを収集することができます。

e+f_12

その④ ERESによる可視化につづく

タグ:

ERES + Fluentd かんたんログ活用術 – その② DBへの出力

ERES + Fluentd かんたんログ活用術の第3弾です。前回の記事で指定ファイルにログを収集しました。ただ、ファイルへの出力ではチャートやレポートのデータソースとしては使いづらいです。そこで今回はDBを出力先として指定し、DBにログを収集してみます。

DBにはPostgreSQLを使用します。このDBにログ情報を送信するためにプラグインを追加します。使用するプラグインは「pgjson」です。PostgreSQLにJSON形式で情報を出力するプラグインです。

事前にPostgreSQL上で格納先となるテーブルを作成します。タグとタイムスタンプとログ情報を入力するカラムが必要です。

CREATE TABLE fluentd (
tag Text
,time Timestamptz
,record Json
);

 

次にプラグインの追加ですが、このプラグインに必要なソフトウェアを先にインストールします。

$yum groupinstall “Development Tools” –y
$yum install postgresql postgresql-devel –y

 

プラグインを追加します。

/usr/sbin/td-agent-gem install fluent-plugin-pgjson

 

インストールが完了したら、環境に合わせてFluentdの設定ファイルを変更します。

<source>
type forwardtype pgjson
</source><match dbmoto.history>
host **.**.**.**
port 5432
database climb
table fluentd
user climb
password ********
time_col time
tag_col tag
record_col record
</match>

 

設定を反映させるため、サービスを再起動します。

$ /etc/init.d/td-agent restart

 

テーブルを確認すると、今までファイルに出力されていたログがDBに出力されていることがわかります。
e+f_10

その③ フィルタリングにつづく

タグ:

ERES + Fluentd かんたんログ活用術 – その① ログの収集

ERES + Fluentd かんたんログ活用術の第2弾です。前回はログ収集を行うためのミドルウェア「Fluentd」をインストールしました。今回はログの収集を行ってみたいと思います。最終的な目的はアプリケーションサーバ上のログをログ収集サーバへ収集することですが、まずはアプリケーションサーバ内でログの収集が行えるかを試してみましょう。

WindowsにインストールされたFluentdの設定ファイルはC:\fluentd\fluent.confです。この中にログの収集元と収集先について記載します。

<source>
type tail
format /^(?<rep_id>[^\t]*)\t(?<time>[^\t]*)\t(?<status>[^\t]*)\t(?<session>[^\t]*)\t*(?<session_time>[^\t]*)\t*(?<success>[^\t]*)\t*(?<fail>[^\t]*)\t*(?<total>[^\t]*)/
time_format %Y-%m-%d %H:%M:%S.%L
path C:\Program Files\HiT Software\DBMoto V8\Log\DBMoto_0001.his
pos_file C:\Program Files\HiT Software\DBMoto V8\Log\DBMoto_0001.his.pos
tag dbmoto.history
</source>

<source>~</source>
データの入力プラグインの指定を行います。type tailでin_tailプラグインを指定していることを表しています。プラグインごとに必要な設定値もこの中に記述します。

type tail
対象ファイルの更新を検知し、追加された行を1行ずつ取得します。

format /^(?<rep_id>[^\t]*)\t(?<time>[^\t]*)\t(?<status>[^\t]*)\t(?<session>[^\t]*)\t*(?<session_time>[^\t]*)\t*(?<success>[^\t]*)\t*(?<fail>[^\t]*)\t*(?<total>[^\t]*)/
tailする対象のデータ形式を正規表現で記述します。今回対象となるDBMotoのhistoryログを正規表現でパースすることで、JSON形式のデータにしています。apacheとsyslogには正規表現のテンプレートが用意されていますが、その他のデータでは自分で正規表現のフォーマットを作成する必要があります。Fluentdでトライアンドエラーを行うのは大変なので、次のサイトを使うと便利です。
http://fluentular.herokuapp.com/

time_format %Y-%m-%d %H:%M:%S.%L
timeフィールドの形式。このパラメータは、’time’という項目がデータに含まれていて、それが自動的に解析できない場合にのみ必要です。

path C:\Program Files\HiT Software\DBMoto V8\Log\DBMoto_0001.his
参照するファイルのパスです。

pos_file C:\Program Files\HiT Software\DBMoto V8\Log\DBMoto_0001.his.pos
tailしているファイルのどこまでをtailしたかという位置情報をファイルに保存する場合に、そのファイルパスを記述します。これでfluentdがダウンした場合も、元の場所からtailを再開できます。

tag dbmoto.history
tailしたデータtagを指定します。このtagにマッチしたデータをアウトプットします。

<match dbmoto.history>
type file
path C:/fluent/test
time_slice_format %Y%m%dT%H%M%S
</match>

<match>~</match>
出力プラグインの指定を行います。この出力プラグインに振り分けるタグを指定する必要があります。ワイルドカードや{}を使ったOR条件の指定も可能です。

type file
他の出力から受け取ったバッファをファイルに書き出すプラグインです。

path C:/fluent/test
ファイルの出力先となるパスです。実際のファイル名はtime_slice_format+suffix+.logです。

time_slice_format %Y%m%dT%H%M%S
ファイル名のpath以降に追加される時間のフォーマット形式です。

設定ファイルの変更後は、サービスの再起動が必要です。前回Windowsサービスとして登録したので、GUIでサービスを再起動します。

これで、設定が有効になったので、実際に動作するか確認してみましょう。DBMotoを動かして、sourceで指定したパスにログが追加されました。

e+f_04

e+f_05

すると、matchで指定したパスに新たなファイルが追加されています。

e+f_06

ファイルを開いて見てみると、正規表現でJSON形式にパースされたログが記述されています。成功のようです。

e+f_07

では、次に本来の目的であるログ収集サーバへのアプリケーションサーバのログ収集を行います。別Fluentdサーバへのログ転送にはout_forwardプラグインを使用するので、このプラグインに合わせて、設定ファイルを編集します。

<match dbmoto.history>
type forward
<server>
host 192.168.0.37
port 24224
</server>
</match>

<server>~</server>に転送先のホストとポートを指定します。ポートには24224を使用するので、ログ収集サーバではUDP 24224を事前に開けておきます。

これで、送信側であるアプリケーションサーバの設定は終わりました。次は受信側のログ収集サーバの設定を行います。Linux上のFluentdの設定ファイルは、/etc/td-agent/td-agent.confです。

<source>
type forward
</source><match **>
type file
path /var/log/td-agent/test_log
time_slice_format %Y%m%dT%H%M%S
</match>

<source>~</source>内のin_forwardプラグインでout_forwardプラグインから転送されたデータを受け取ります。設定変更後はサービスを再起動します。次のコマンドを実行してください。

$ /etc/init.d/td-agent restart

これで設定が有効になるので、DBMotoを動かしてログを吐き出してみます。

e+f_08

/var/log/td-agent/に出力されたログを見てみると、問題なく出力されています。

e+f_09

これで、アプリケーションサーバからログ収集サーバへのログの収集が完了です。

その② DBへの出力につづく

タグ: , ,

ERES + Fluentd かんたんログ活用術 – その⓪ Fluentdのインストール

アプリケーションやデータベースにはログがつきものです。プログラムが実行されたときの経過情報をあらかじめ決められた出力先に書き出します。このログは大抵の場合、そのサーバのローカル領域に保存されるため、ログの内容を確認するだけでも大変です。これではログをうまく活用することなんてそうそうできません。

このシリーズでは、弊社取扱い製品であるERESFluentdというオープンソースミドルウェアを利用して、このようなログを一ヶ所に集約し、チャートやレポートとして、どのように活用していくかを紹介していきます。

e+f_01

図は構成のイメージ図です。次のような処理を行っています。

①アプリケーションサーバからログを収集
②DBサーバへのログの出力
③ログ収集サーバ上でログのフィルタリング
④ERESサーバからDBを参照し、チャートやレポートを作成

今回、ログを収集するために利用しているのは、Fluentdというオープンソースのミドルウェアです。豊富なプラグインを組合せ、データの取り込み、加工そして各種ミドルウェアやAPIコール、ファイルへの出力を実現できます。詳しくは、公式サイトをご覧ください。

そして、収集対象のログには、弊社製品のDBMotoが出力するhistoryログを使用します。DBMotoはDBで行われた変更(insert,update,deleteなど)を検知し、異種DBへほぼリアルタイムに反映させることができるDRや移行、データ連携に最適なツールです。historyログには何時に何件のデータがソースDBからターゲットDBへコピーされたのかなどの情報が記載されています。

それでは、早速Fluentdをインストールしてみましょう。インストールを行うのは、アプリケーションサーバ(Windows)とログ収集サーバ(Linux)の2つです。

ログ収集サーバへのインストール
OSはRHEL 7.2を使用しています。インストールは次のコマンドを実行します。RPMリポジトリにシェルスクリプトが登録され、RPMパッケージがインストールされます。詳細については、こちらをご参照ください。

curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh

e+f_02

インストール後、次のコマンドでtd-agentサービスが起動します。

$ /etc/init.d/td-agent start
Starting td-agent: [  OK  ]

アプリケーションサーバへのインストール
OSはWindows 8です。Windowsはつい最近、正式サポートが行われたようです。事前に次のソフトをインストールする必要があります。詳しくはこちらをご参照ください。

  • Ruby 2.2.x (6.4bit)
  • DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe
  • Git for Windows

これらをインストール後、コマンドプロンプトから次のコマンドを実行することでインストールが行われます。

git clone https://github.com/fluent/fluentd.git
cd fluentd
git checkout windows
gem install bundler
bundle
bundle exec rake build
gem install pkg\fluentd-0.12.9.gem –no-ri –no-rdoc

インストール後、次のコマンドでサービスを起動できますが、

fluentd -c ./example/in_forward.conf

後々楽になので、Windowsサービスとして登録しておきます。

fluentd –reg-winsvc i

e+f_03

その① ログの収集へつづく

タグ: , ,