Quantcast
Channel: パークのソフトウエア開発者ブログ|ICT技術(Java・Android・iPhone・C・Ruby)なら株式会社パークにお任せください
Viewing all 138 articles
Browse latest View live

SikuliX if exists( )を活用しよう

$
0
0

if exists( )の活用


   Find( )やClick( )などでFindFailed が発生し場合、Sikuliの実行が停止してしまいます。

 処理を止めないためにif exists( )を利用します。

 

 exists関数は対象の画像発見されるまで待機します。

 exists([画像] ,タイムアウト値(秒)):タイムアウト値は省略可能です。その場合は3秒となります。

 

  1.以下のように記載し、対象のオブジェクトが発見できなかった場合にFindFailedで停止してしまいます。

   

   

 

  1.if exists( )を利用することにより回避が可能となります。

   

 

   

 


Sikulix バッチ実行

$
0
0

 

Sikulix のコマンドラインからの実行方法について

 

Sikulixのコマンドラインからの実行方法は2つあります。

 

1.「*.skl」ファイルからの実行方式

  *.skl形式に保存されていますが、スクリプト一式がZip形式で保存されています。

  skl形式にしてしまえばスクリプト一式のコピー作業などが不要になるかと思います。

 

2.スクリプトが格納されているフォルダを指定しての実行方式

 

「*.skl」ファイルからの実行手順

 

 1.「*.skl」ファイルからの準備

  「ファイルメニュー」 → 実行ファイルとしてエクスポート

  

 

 2.任意のファイル名を指定して[保存]ボタンクリック

   

 

 3.コマンドプロンプトからの実行

   runsikulix.cmd -r Click_Sample.skl で実行可能です。

 

スクリプト格納フォルダからの実行手順

 

 1.コマンドプロンプトからの実行

   C:\sikulix\click_sample.sikuliフォルダにスクリプト一式がある場合

   runsikulix.cmd -r c:\sikulix\click_sample.sikuli

 

 2.実行結果

   

   

 

 

SikuliX リモートデスクトップ設定

$
0
0

 

1.リモート接続中に最小化するとSikuliが動作しない

 

 リモート接続中に画面を最小化してしまうと、リモートセッションがGUIなしのモードになってしまい、Sikuliが正常に動作しません。
 リモート接続元で以下のレジストリキーを追加してください。

 

 ■すべてのユーザ

  以下のキーを検索:
   HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client
  以下を作成(DWORDで2を指定):
   RemoteDesktop_SuppressWhenMinimized = 2 (DWORD)

  64bitの場合は以下も追加
  以下のキーを検索:
   HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\Terminal Server Client
  以下を作成(DWORDで2を指定):
   RemoteDesktop_SuppressWhenMinimized = 2 (DWORD)

■カレントユーザ

  以下のキーを検索:
   HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\Terminal Server Client
  以下を作成(DWORDで2を指定):
  RemoteDesktop_SuppressWhenMinimized = 2 (DWORD)

  64bitの場合は以下も追加
  以下のキーを検索:
   HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\Terminal Server Client
  以下を作成(DWORDで2を指定):
   RemoteDesktop_SuppressWhenMinimized = 2 (DWORD)
 

2.リモートデスクトップ接続設定

 

  リモートデスクトップを接続する際にクリップボードの共有をはずします。
  sikuliでpast( )を利用している場合等に影響がでてしまいます。


  以下設定方法
  


 

 

IEのアドオンの管理から削除できない場合

$
0
0

IEのアドオンの管理から削除を実行したのに、アドオンの管理に残ったままで

削除ボタンがグレーアウトされてしまい、アドオンの管理からは削除できない

ocxファイルなどを削除する方法のご紹介です。

 

1. 削除したいファイルの場所をアドオンの管理の詳細情報(フォルダー)で確認し、

  コマンドプロンプトを管理者実行で立ち上げてその場所に移動します。

 

 > cd <削除したいファイルの場所>

 

2. 以下のコマンドを実行します。

 

 > regsvr32 /u <削除したいファイル>

windowsコマンドの一覧

renコマンドでワイルドカードを使用する際の注意

$
0
0

windowsでファイル名を変更する際に使用するrenコマンドですが、ワイルドカードを使用する際には注意が必要です。

 

例えば、以下のようにファイル名を変更したいとします。

<変更前のファイル名>  

・1AS5LA1Z.txt

・2AS5MA2Y.txt

・12AS5NA3X.txt

<変更後にしたいファイル名>

・1AS4LA1Z.txt

・2AS4MA2Y.txt

・12AS4NA3X.txt

 

ワイルドカードを使用して、以下のコマンドを打ちます。

>ren *AS5* *AS4*

 

するとファイル名は以下のようになります。

・1AS5LAS4.txt

・2AS5MAS4.txt

・12AS5NAS4.txt

 

新ファイル名(上記の例だと*AS4*)で使用した*<文字列>のワイルドカードを使用すると、*の右にある文字(上記の例だとA)を文字列の右から検索し、そこから右を変更してしまいます。

 

一度に変換できなくなってしまいますが、ワイルドカードの?を使用するとうまくいきます。

 

>ren ?AS5* ?AS4*

<変更後ファイル名>

・1AS4LA1Z.txt

・2AS4MA2Y.txt

 

>ren ??AS5* ??AS4*

<変更後ファイル名>

・12AS4NA3X.txt

 

excelの図形やテキストボックス内の文字検索・置換

$
0
0

excelでは、セルの文字検索や文字置換はできますが、図形やテキストボックス内の文字検索や文字置換はできません。

以下のサイトにある「RelaxTools Addin」というツールをインストールすると図形やテキストボックス内の文字検索や文字置換ができるようになります。

 

http://software.opensquare.net/relaxtools/

 

 

SikuliX Region(領域)を利用して範囲指定

$
0
0

 

Region(領域)
   複数の同一オブジェクトが存在し、特定のオブジェクトを選択させたい場合に有効です。

 

  1.以下のような、同一イメージのボタンを上から順にクリックするする場合

   

   

 

  2.Region(領域)を指定することにより実行可能です。

    Regionの指定は、上段のRegionボタンをクリックし、FindやClickに利用したい範囲を指定します。

    以下、サンプル

    

 

  3.実行結果

    

 

 

 

 

 


SikuliX Findallを利用して同一オブジェクト一括処理

$
0
0

Findall
   複数の同一オブジェクトが存在し、全てのオブジェクトに対して同一処理をさせたい場合に有効です。(全てのボタンをONからOFFに切り替えたい場合等)

   ※イメージの選択順は、Sikuliに依存するため順番にクリックさせたい場合などは注意が必要です。

 

  1.以下のような、同一イメージのボタンを全てクリックするする場合

 

    

 

  2.Findallを指定することにより実行可能です。

    以下、サンプル

    

 

  3.実行結果

    

 

 

 

 

SikuliX if exists( )を活用しよう

$
0
0

if exists( )の活用


   Find( )やClick( )などでFindFailed が発生し場合、Sikuliの実行が停止してしまいます。

 処理を止めないためにif exists( )を利用します。

 

 exists関数は対象の画像発見されるまで待機します。

 exists([画像] ,タイムアウト値(秒)):タイムアウト値は省略可能です。その場合は3秒となります。

 

  1.以下のように記載し、対象のオブジェクトが発見できなかった場合にFindFailedで停止してしまいます。

   

   

 

  1.if exists( )を利用することにより回避が可能となります。

   

 

   

 

Sikulix バッチ実行

$
0
0

 

Sikulix のコマンドラインからの実行方法について

 

Sikulixのコマンドラインからの実行方法は2つあります。

 

1.「*.skl」ファイルからの実行方式

  *.skl形式に保存されていますが、スクリプト一式がZip形式で保存されています。

  skl形式にしてしまえばスクリプト一式のコピー作業などが不要になるかと思います。

 

2.スクリプトが格納されているフォルダを指定しての実行方式

 

「*.skl」ファイルからの実行手順

 

 1.「*.skl」ファイルからの準備

  「ファイルメニュー」 → 実行ファイルとしてエクスポート

  

 

 2.任意のファイル名を指定して[保存]ボタンクリック

   

 

 3.コマンドプロンプトからの実行

   runsikulix.cmd -r Click_Sample.skl で実行可能です。

 

スクリプト格納フォルダからの実行手順

 

 1.コマンドプロンプトからの実行

   C:\sikulix\click_sample.sikuliフォルダにスクリプト一式がある場合

   runsikulix.cmd -r c:\sikulix\click_sample.sikuli

 

 2.実行結果

   

   

 

 

SikuliX リモートデスクトップ設定

$
0
0

 

1.リモート接続中に最小化するとSikuliが動作しない

 

 リモート接続中に画面を最小化してしまうと、リモートセッションがGUIなしのモードになってしまい、Sikuliが正常に動作しません。
 リモート接続元で以下のレジストリキーを追加してください。

 

 ■すべてのユーザ

  以下のキーを検索:
   HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client
  以下を作成(DWORDで2を指定):
   RemoteDesktop_SuppressWhenMinimized = 2 (DWORD)

  64bitの場合は以下も追加
  以下のキーを検索:
   HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\Terminal Server Client
  以下を作成(DWORDで2を指定):
   RemoteDesktop_SuppressWhenMinimized = 2 (DWORD)

■カレントユーザ

  以下のキーを検索:
   HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\Terminal Server Client
  以下を作成(DWORDで2を指定):
  RemoteDesktop_SuppressWhenMinimized = 2 (DWORD)

  64bitの場合は以下も追加
  以下のキーを検索:
   HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\Terminal Server Client
  以下を作成(DWORDで2を指定):
   RemoteDesktop_SuppressWhenMinimized = 2 (DWORD)
 

2.リモートデスクトップ接続設定

 

  リモートデスクトップを接続する際にクリップボードの共有をはずします。
  sikuliでpast( )を利用している場合等に影響がでてしまいます。


  以下設定方法
  


 

 

IEのアドオンの管理から削除できない場合

$
0
0

IEのアドオンの管理から削除を実行したのに、アドオンの管理に残ったままで

削除ボタンがグレーアウトされてしまい、アドオンの管理からは削除できない

ocxファイルなどを削除する方法のご紹介です。

 

1. 削除したいファイルの場所をアドオンの管理の詳細情報(フォルダー)で確認し、

  コマンドプロンプトを管理者実行で立ち上げてその場所に移動します。

 

 > cd <削除したいファイルの場所>

 

2. 以下のコマンドを実行します。

 

 > regsvr32 /u <削除したいファイル>

windowsコマンドの一覧

renコマンドでワイルドカードを使用する際の注意

$
0
0

windowsでファイル名を変更する際に使用するrenコマンドですが、ワイルドカードを使用する際には注意が必要です。

 

例えば、以下のようにファイル名を変更したいとします。

<変更前のファイル名>  

・1AS5LA1Z.txt

・2AS5MA2Y.txt

・12AS5NA3X.txt

<変更後にしたいファイル名>

・1AS4LA1Z.txt

・2AS4MA2Y.txt

・12AS4NA3X.txt

 

ワイルドカードを使用して、以下のコマンドを打ちます。

>ren *AS5* *AS4*

 

するとファイル名は以下のようになります。

・1AS5LAS4.txt

・2AS5MAS4.txt

・12AS5NAS4.txt

 

新ファイル名(上記の例だと*AS4*)で使用した*<文字列>のワイルドカードを使用すると、*の右にある文字(上記の例だとA)を文字列の右から検索し、そこから右を変更してしまいます。

 

一度に変換できなくなってしまいますが、ワイルドカードの?を使用するとうまくいきます。

 

>ren ?AS5* ?AS4*

<変更後ファイル名>

・1AS4LA1Z.txt

・2AS4MA2Y.txt

 

>ren ??AS5* ??AS4*

<変更後ファイル名>

・12AS4NA3X.txt

 


excelの図形やテキストボックス内の文字検索・置換

$
0
0

excelでは、セルの文字検索や文字置換はできますが、図形やテキストボックス内の文字検索や文字置換はできません。

以下のサイトにある「RelaxTools Addin」というツールをインストールすると図形やテキストボックス内の文字検索や文字置換ができるようになります。

 

http://software.opensquare.net/relaxtools/

 

 

npm で公開するブラウザー向けパッケージのファイル構成は Redux を参考にしよう

$
0
0

ファイル構成は Redux 3.7.2 を、
ファイル名やディレクトリ名は主に React 16.0.0 を参考にしています。
  Redux: https://www.jsdelivr.com/package/npm/redux
  React: https://www.jsdelivr.com/package/npm/react

結論から言えばこんなファイル構成と package.json になります。
 

ファイル構成
my-package/  src/                -- ソースコード    index.ts            -- メインモジュール (エントリポイント)    submodule1.ts       -- 他のモジュールからインポートするモジュール    submodule2.ts       --      〃    ...  umd/ (or dist/)     -- UMD ビルド    my-package.js    my-package.min.js  types/              -- TypeScript 型定義    index.d.ts    submodule1.d.ts    submodule2.d.ts    ...  es/                 -- ES 2015 モジュール群    index.js    submodule1.js    submodule2.js    ...  cjs/ (or lib/)      -- CommonJS モジュール群    index.js    submodule1.js    submodule2.js    ...  LICENSE  README.md  package.json
package.json
{  "name": "my-package",  "version": "0.0.0",  "main": "./cjs/index.js",  "module": "./es/index.js",  "jsnext:main": "./es/index.js",  "types": "./types/index.d.ts",  "jsdelivr": "./umd/my-package.min.js",  "unpkg": "./umd/my-package.min.js",  "files": [    "umd",    "cjs",    "es",    "types",    "src"  ],  ...}

以下、このようにした私の言い分です。


■ ソースコードを提供しよう (src/)

ソースコードを npm パッケージに含めるかどうかは完全に任意です。
Redux はソースコードを含めていますが、 React は含めていません。
個人的には何かトラブったときに読みたくなる可能性があるので含めてほしいです。

■ ️UMD ビルドを提供しよう (umd/ または dist/)

UMD は IIFE + AMD + CommonJS です。
HTML の script タグで読み込む (IIFE) ことも、
スクリプト実行時に非同期で取り込む (AMD) ことも、
モジュールバンドラーでくっつけることもできます。

バンドルしていない CommonJS モジュール群を別途提供する場合 (後述)、
UMD は提供せず AMD は捨てて IIFE を提供するという選択肢もあるかと思います。
が、わざわざ AMD を捨てるより思考停止して UMD を提供すれば良いと私は思います。
(IIFE に対する UMD のオーバーヘッドなんて微々たるものでしょう。)

CommonJS モジュール群を別途提供しない場合は
package.json の main フィールドに UMD ビルドのパスを書きましょう。
https://docs.npmjs.com/files/package.json#main
CDN からの利用を想定するなら
package.json の jsdelivr フィールドと unpkg フィールドに minified UMD ビルドのパスを書きましょう。
https://www.jsdelivr.com/features#publishing-packages
https://unpkg.com

ディレクトリ名は Redux では dist/ ですが React では umd/ です。
(React 15 では dist/ でしたが 16 で umd/ に変更されています。)
私は dist/ という言葉に意味を感じられないので (他のファイルも distribution には違いないので) umd/ としています。


■ TypeScript 型定義を提供しよう (index.d.ts または types/)

お願いします (私が一応 TSer なので)。

そして
package.json の types フィールド (または typings フィールド) にメインモジュールの型定義のパスを書きましょう。
https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html

ディレクトリ名として typings という言葉も使えそうですが、
TypeScript の黒歴史を彷彿とさせるので私は避けています。
https://github.com/typings/typings

Redux ではパッケージルートに index.d.ts が置かれています。
ちな Flow の型定義は見当たりませんでした。
React は Facebook なので Flow 推しだと思うのですが、
TypeScript の型定義も Flow の型定義も見当たりませんでした。


■ ️ES 2015 モジュールを提供しよう (es/)

ES 2015 モジュールの時代がやってきました (やっと...きました)。

Rollup はプラグインなしでは ES 2015 形式のモジュールじゃないと読み込めません。
https://github.com/rollup/rollup-plugin-commonjs
webpack 2+ は ES 2015 形式のモジュールじゃないと Tree Shaking できないようです。
https://github.com/indutny/webpack-common-shake
主要ブラウザーは import ステートメントを実装し始めているようです。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/import
# NodeJS でも 8.5.0 で ES モジュール機能が実装されましたが、 9.1.0 現在も実行時オプションに --experimental-modules フラグを付けた上で拡張子を .mjs にする必要があります (https://nodejs.org/api/esm.html)。
# 今回はブラウザー向けパッケージの話に絞ります。

ということで ES 2015 モジュールを提供しましょう。
 
そして
package.json の module フィールドと jsnext:main フィールドにメインモジュールのパスを書きましょう (jsnext:main はもう要らないかもですが一応)。
https://github.com/rollup/rollup-plugin-node-resolve
https://webpack.js.org/configuration/resolve/#resolve-mainfields

重要な注意点として、モジュール形式は ES 2015 でも、使用できる言語機能やライブラリはサポート対象とする実行環境次第 (IE 11 を含めるなら ES 5 相当) になるかと思います。
Rollup や webpack 2+ は ES 2015 の import 構文を解析してモジュールをくっつけることはできますが、他の構文のトランスパイルや Polyfill の提供はしないからです。

たとえば Object#assign() を使いたい場合、次のいずれかの対処が必要になるかと思います。

* Ponyfill を dependencies に含めてインポートする
* Polyfill を読み込んでから自身のモジュールを利用するよう利用者に懇願する
* IE 11 はサポート対象外だと明言する

結局モジュール形式以外は CommonJS モジュール群を提供していたこれまでと同じです。

# 私は依存パッケージの数だけ Object#assign() の代替実装が読み込まれているような気がしてなりません。
# 最終的に利用するアプリでは core-js や babel-polyfill を読み込むかもしれないのに...


■ ️CommonJS モジュール群は必要に応じて提供しよう (cjs/ または lib/)

ES 2015 モジュールが読み込めない古いモジュールバンドラー (browserify とか webpack 1.x とか) や NodeJS 向けに、バンドルしていない CommonJS 形式のモジュールを提供する場合があります。
UMD ビルドも CommonJS モジュールとして読み込めますが、未バンドルの CommonJS モジュール群も別途提供した方が良い場合が多いと思います。理由は以下。

たとえばパッケージ a, b のメインモジュールがいずれもパッケージ z を読み込んでいるとします。
  var a = require('a');
  var b = require('b');
と書いたとき、
もし a, b がいずれも未バンドルの CommonJS であれば、 require('z') は 2 回呼ばれますが、実質的に z が読み込まれるのは 1 回です。
もし a がバンドル済み (UMD ビルド) であれば、すでに z は a に「組み込まれて」しまっており、 b のメインモジュールはそれを知らずに require('z') するので、 z は 2 回読み込まれることになります。

依存パッケージが全くないのであれば UMD で十分かと思いますが、
そうでないなら UMD ビルドではとても効率が悪くなってしまう可能性があるので、
未バンドルの CommonJS モジュール群も提供しましょう。
 
そして
package.json の main フィールドにメインモジュールのパスを書きましょう。
https://docs.npmjs.com/files/package.json#main
https://webpack.github.io/docs/configuration.html#resolve-packagemains
https://github.com/browserify/browserify#packagejson

ディレクトリ名は Redux では lib/ ですが React では cjs/ です。
(React 15 では lib/ でしたが 16 で cjs/ に変更されています。)
私は lib/ という言葉に意味を感じられないので cjs/ としています。

ディレクトリを掘らずパッケージルートに CommonJS モジュール群を置いているパッケージもあります。
たとえば react-router (4.2.0 現在)
https://www.jsdelivr.com/package/npm/react-router
次のように、複数のモジュールを必要に応じて個別に読み込むようなパッケージ (メインモジュールが「唯一のエントリポイント」ではないパッケージ) では便利かもしれません。
  var module1 = require('that-package/module1');
  var module3 = require('that-package/module3');


■ 結論

結論は最初に書きました。

ちな実際に個人的に npm でパッケージを公開してみましたが、
他のパッケージに依存しなかったので CommonJS モジュール群は含めませんでした。
https://www.npmjs.com/package/ripplet.js
https://www.jsdelivr.com/package/npm/ripplet.js

以上、ちかでした

[Docker] netdataでパフォーマンスをモニタリングしてみる

$
0
0

こんにちは!パーク社員のゆんぼうです。
今回は、Dockerのパフォーマンスをモニタリングできるツールを調査しました。
その1つ目として、「netdata」 を紹介します。

netdataとは

「netdata」とは、リアルタイムでパフォーマンスを監視できるツールです。
公式ページ: https://hub.docker.com/r/titpetric/netdata/

以下の特徴があります。

  ・WEBページでグラフの表示が可能

  ・環境に合わせて、設定を行う必要がない

  ・実行速度が速く、また負荷も低いため、1秒毎にデータ収集が可能

  ・プラグインを使用すると収集できるデータの種類を追加することが可能

  ・アラート機能 (Eメール, Slackなど連携可)

  ・長期間の監視データの蓄積は行わない(数日程度)

 

下記にサンプルページがありますでご覧になられてはいかがと思います。
サンプルページ: https://my-netdata.io/#demosites
 

netdataの環境構築手順

環境構築手順は下記の通りです。

 

・Windows 10 Pro

・Docker Toolbox (v17.07.0-ce)

・docker-machine でマシンを作成済みとします。(IP: 192.168.99.101)

 

1. 「Docker Quickstart Terminal」を起動します。

2. 『docker-compose.yml』を作成します。内容は下記の通りです。

version: '3' services:   netdata:     image: titpetric/netdata:latest     ports:      - '19999:19999'     restart: always    cap_add:       - SYS_PTRACE    volumes:       - /proc:/host/proc:ro      - /sys:/host/sys:ro

3. 下記のコマンドを実行します。 

$ docker-compose up -d

4. 下記のURLにアクセスします。
http://192.168.99.101:19999

netdataのWEB画面の操作手順

WEB画面の操作手順は下記の通りです。

 

以上です。

[Docker] cAdvisorでパフォーマンスをモニタリングしてみる

$
0
0

こんにちは!パーク社員のゆんぼうです。
今回は、Dockerのパフォーマンスをモニタリングできるツールを調査しました。
その2つ目として、「cAdvisor」 を紹介します。

cAdvisorとは

「cAdvisor」とは、リアルタイムでDockerのコンテナのパフォーマンスを監視できるツールです。
公式ページ: https://github.com/google/cadvisor

以下の特徴があります。

  ・WEBページでグラフの表示が可能

  ・1秒毎に同じホストにあるコンテナのメトリクス情報を収集する

  ・メトリクス情報のAPIを提供しており、「Prometheus」や「InfluxDB」と連携が可能

  ・長期間の監視データの蓄積は行わない(メモリ上に直近60秒の情報を保持するのみ)

 

cAdvisorの環境構築手順

環境構築手順は下記の通りです。

 

・Windows 10 Pro

・Docker Toolbox (v17.07.0-ce)

・docker-machine でマシンを作成済みとします。(IP: 192.168.99.102)

 

1. 「Docker Quickstart Terminal」を起動します。

2. 『docker-compose.yml』を作成します。内容は下記の通りです。

version: '3'services:  cadvisor:    image: google/cadvisor:latest    expose:      - '8080'    ports:      - '8080:8080'    restart: always    privileged: true    networks:      default:        aliases:          - cadvisor    volumes:      - /:/rootfs:ro      - /var/run:/var/run:rw      - /sys:/sys:ro      - /var/lib/docker:/var/lib/docker:ro

3. 下記のコマンドを実行します。 

$ docker-compose up -d

4. 下記のURLにアクセスします。
http://192.168.99.102:8080

cAdvisorのWEB画面の操作手順

WEB画面の操作手順は下記の通りです。

以上です。

[Docker] Prometheusでパフォーマンスをモニタリングしてみる

$
0
0

こんにちは!パーク社員のゆんぼうです。
今回は、Dockerのパフォーマンスをモニタリングできるツールを調査しました。
その3つ目として、「Prometheus」 を紹介します。

Prometheusとは

「Prometheus」とは、リアルタイムでパフォーマンスを監視できるツールです。
公式ページ: https://prometheus.io/

以下の特徴があります。

  ・WEBページでグラフの表示が可能

  ・「Prometheus Server」と「exporter」の構成で運用する

  ・アラート機能 (Eメール, Slackなど連携可)

  ・長期間の監視データの蓄積が可能。Prometheusと同じローカルディスクに保存される

 

「Prometheus Server」と「exporter」で行っていることは下記の通りです。

Prometheus Server各exporterのAPIからメトリクス情報の取得と蓄積、WEBページの表示、アラート通知を行う。
exporterログからメトリクス情報を生成する。メトリクス情報のAPIを提供する。「node exporter」や「cAdvisor」などがある。

 

Prometheusの環境構築手順

環境構築手順は下記の通りです。

 

・Windows 10 Pro

・Docker Toolbox (v17.07.0-ce)

・docker-machine でマシンを作成済みとします。

  ・マシン1: 192.168.99.103 → 「Prometheus」と「node exporter」をインストールします。

  ・マシン2: 192.168.99.104 → 「node exporter」をインストールします。

  ・マシン3: 192.168.99.105 → 「cAdvisor」をインストールします。

  ・マシン4: 192.168.99.106 → 「cAdvisor」をインストールします。

 

1. 「Docker Quickstart Terminal」を起動します。

2. マシン1をアクティブにして、『prometheus.yml』を作成します。内容は下記の通りです。

global:  scrape_interval: 15s  evaluation_interval: 15s  external_labels:    monitor: 'codelab-monitor'scrape_configs:  - job_name: 'prometheus'    scrape_interval: 5s    scrape_timeout: 2s    honor_labels: true    static_configs:      - targets: ['192.168.99.103:9090']  - job_name: 'docker-host'    scrape_interval: 5s    scrape_timeout: 2s    metrics_path: /metrics    static_configs:      - targets: ['192.168.99.103:9100', '192.168.99.104:9100']        labels:          group: 'docker-host'  - job_name: 'docker'    scrape_interval: 5s    scrape_timeout: 2s    metrics_path: /metrics    static_configs:      - targets: ['192.168.99.105:8080', '192.168.99.106:8080']        labels:          group: 'docker'

3. マシン1で『docker-compose.yml』を作成します。内容は下記の通りです。

version: '3'services:  prometheus:    image: prom/prometheus    volumes:       - /C/test1/prometheus.yml:/test1/prometheus.yml    expose:      - '9090'    ports:      - '9090:9090'    restart: always    command:       - '-config.file=/test1/prometheus.yml'  grafana:    image: grafana/grafana    expose:      - '3000'    ports:      - '3000:3000'    restart: always    environment:      GF_SECURITY_ADMIN_USER: admin      GF_SECURITY_ADMIN_PASSWORD: admin      GF_USERS_ALLOW_SIGN_UP: 'false'      GF_USERS_ALLOW_ORG_CREATE: 'false'  node_exporter:    image: prom/node-exporter    expose:      - '9100'    ports:      - '9100:9100'    restart: always    volumes:      - /proc:/host/proc:ro      - /sys:/host/sys:ro      - /:/rootfs:ro

4. マシン1で下記のコマンドを実行します。 

$ docker-compose up -d

5. マシン2をアクティブにして、『docker-compose.yml』を作成します。内容は下記の通りです。

version: '3'services:  node_exporter:    image: prom/node-exporter    expose:      - '9100'    ports:      - '9100:9100'    restart: always    volumes:      - /proc:/host/proc:ro      - /sys:/host/sys:ro      - /:/rootfs:ro

6. マシン2で下記のコマンドを実行します。 

$ docker-compose up -d

7. マシン3、4をそれぞれアクティブにして、『docker-compose.yml』を作成します。内容は下記の通りです。

version: '3'services:  cadvisor:    image: google/cadvisor:latest    expose:      - '8080'    ports:      - '8080:8080'    restart: always    privileged: true    networks:      default:        aliases:          - cadvisor    volumes:      - /:/rootfs:ro      - /var/run:/var/run:rw      - /sys:/sys:ro      - /var/lib/docker:/var/lib/docker:ro

8. マシン3、4それぞれで下記のコマンドを実行します。 

$ docker-compose up -d

9. 下記のURLにアクセスします。
http://192.168.99.103:9090 (Prometheus標準Webページ)

http://192.168.99.103:3000 (Grafanaで表示したWebページ)

 

PrometheusのWEB画面の操作手順

PrometheusのWEB画面の操作手順は下記の通りです。

1. メニューから「Graph」選択します。「- insert metric at cursor -」のプルダウンを選択します。

 

2. 「Execute」ボタンを押下します。

 

3. 「Graph」ボタンを押下します。

 

4. グラフが表示されます。

 

クエリーは、下記のように変更して、「Execute」ボタンを押下すると、「docker」グループに所属しているデータだけ表示することができます。

go_memstats_alloc_bytes

go_memstats_alloc_bytes{group="docker"}

クエリの入力方法は下記のURL参照してください。
https://prometheus.io/docs/querying/basics/

 

5. メニューの「Alerts」を選択するとアラート一覧が表示されます。

 

6. メニューの「Status」を選択して、「Targets」を選択すると、メトリック取得対象が表示されます。

PrometheusのWEB画面の操作手順 (Grafana)

Grafanaでは、Prometheusが標準で用意しているWebページよりもグラフィカルなページを表示することができます。

 

1. ログイン画面において、ID「admin」, PW「admin」を入力して、「Login」ボタンを押下します。

 

2. データソースを設定して、「Save & Test」ボタンを押下します。

 

3. 「Dashboards」を選択して、「import」ボタンを押下します。「Prometheus Stats」を選択します。

 

4. 「Prometheus」のグラフが表示されます。

 

5. 新しくグラフを追加した際に、Prometheusのクエリーを指定することが可能です。

 

以上です。

Viewing all 138 articles
Browse latest View live