ログ収集¶
ソフトウェアプロセスはログを生成し、それがアプリケーションの内部動作への洞察になります。ソフトウェアシステムが複雑になり、複数のデバイスに分散されると、何百ものプロセスが 何百万ものログエントリを生成します。例えば、レーザセンサ装置ドライバは点群データを含むログを生成することができます。同時に、自律飛行ドローン用の自動操縦ソフトウェアは、 経路探索グラフをログにダンプすることもできます。
ソフトウェア障害を診断およびデバッグするには、失敗の原因を見つける必要があり、膨大な量のログデータをナビゲートして理解することが必要です。
PSYGIG Mobility IoT SDK は、複数のソースからのデータを纏めるログ統合機能を提供することで、ログ収集プロセスを簡素化します。統合されたログは サポートされている出力プラグイン にプッシュできます。 Log Collection APIには、組み込みシステムへの統合に適した多くの機能も含まれています。
アプリケーションで動作でき、 ソースコードを再コンパイルする必要はありません
サードパーティのロギングプラットフォーム および データベース とのシームレスな統合
既知のアプリケーション によって生成されたログファイルを自動的に監視および収集します。
アプリケーション独自のロギングニーズに合わせて組み込みロギング機能を使用する
ログをさまざまなファイル形式(JSON、CSV、HTMLなど)にエクスポートする
既知ログソース¶
Log Collection APIは、下記に記載された既知のアプリケーションからログファイルを検出および監視する機能を提供します。
syslogd (eg. auth, daemon, kern, syslog) |
|
journald |
|
rsyslogd |
|
syslog-ng |
|
Apache HTTP Server |
|
Apache Tomcat |
|
Apache Zookeeper |
|
Apache Kafka |
|
Nginx |
|
MySQL |
|
PostgreSQL |
|
MongoDB |
|
CouchDB |
|
Redis |
|
Amazon AWS |
|
Docker |
|
Django |
|
Jenkins |
|
HAProxy |
|
Nagios |
|
Cassandra |
|
Sinatra |
|
Varnish |
psymon
の使用¶
ソースコードを修正しなくても、 psymon
スクリプトを使用してプログラムを実行することで、既知のアプリケーションログ収集を
アプリケーションに即座に有効にすることができます。例:
psymon --logs "/path/to/your/app --arg1 --arg2 --arg3"
オプションリストは psymon-manページ を参考ください。
C/C++ SDK APIの使用¶
Log Collection APIは、 単一のヘッダーファイル をインクルードし、 libpsyiage
共有ライブラリを
リンクすることによってアクセスできます。詳細については、 アドバンス設定 - libpsyiage を使ってアプリケーションを構築 を参照してください。
既知のログファイルのリアルタイム監視¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #include <psyiage/psyiagesdk.h>
int main(int argc, char **argv)
{
psyiage_handle pah; // handle to psyiage instance
/* ... Initialize code omitted for simplicity ... */
// Search for known log files
char** logfiles = NULL; // Array of known log files
uint32_t* logfileflags = NULL; // Array of log flags
int numfiles = 0; // Number of log files found
rc = psyiage_log_glob_known_log_files(&logfiles, &logfileflags, &numfiles);
// Monitor all log files found in real-time, at a period of 1 second
int i;
for (i = 0; i < numfiles; i++)
{
char *logfile = logfiles[i];
rc = psyiage_log_monitor_log_file(pah, logfile, 1000);
}
// Free memory allocated to arrays
psyiage_log_glob_free(logfiles, logfileflags, numfiles);
/* ... Cleanup code omitted for simplicity ... */
}
|
syslog
JSON出力サンプル¶
{
"FilePath": "/var/log/messages",
"Entries": [
{
"Duration": 5.006322384,
"Timestamp": 1559440474.084455013,
"TimeOfDay": "2019-06-02 10:54:34.084455013",
"LogFile": "/var/log/messages",
"LogText": "Jun 2 10:54:33 ubuntu log_monitor[35659]: psyiage 0.3.0 log monitoring test @ priority Warning"
},
{
"Duration": 6.008110762,
"Timestamp": 1559440475.086243391,
"TimeOfDay": "2019-06-02 10:54:35.086243391",
"LogFile": "/var/log/messages",
"LogText": "Jun 2 10:54:34 ubuntu log_monitor[35659]: psyiage 0.3.0 log monitoring test @ priority Notice"
},
{
"Duration": 6.008533001,
"Timestamp": 1559440475.086665630,
"TimeOfDay": "2019-06-02 10:54:35.086665630",
"LogFile": "/var/log/messages",
"LogText": "Jun 2 10:54:35 ubuntu log_monitor[35659]: psyiage 0.3.0 log monitoring test @ priority Info"
}
]
},