ログ収集

ソフトウェアプロセスはログを生成し、それがアプリケーションの内部動作への洞察になります。ソフトウェアシステムが複雑になり、複数のデバイスに分散されると、何百ものプロセスが 何百万ものログエントリを生成します。例えば、レーザセンサ装置ドライバは点群データを含むログを生成することができます。同時に、自律飛行ドローン用の自動操縦ソフトウェアは、 経路探索グラフをログにダンプすることもできます。

ソフトウェア障害を診断およびデバッグするには、失敗の原因を見つける必要があり、膨大な量のログデータをナビゲートして理解することが必要です。

PSYGIG Mobility IoT SDK は、複数のソースからのデータを纏めるログ統合機能を提供することで、ログ収集プロセスを簡素化します。統合されたログは サポートされている出力プラグイン にプッシュできます。 Log Collection APIには、組み込みシステムへの統合に適した多くの機能も含まれています。

  • アプリケーションで動作でき、 ソースコードを再コンパイルする必要はありません

  • サードパーティのロギングプラットフォーム および データベース とのシームレスな統合

  • 既知のアプリケーション によって生成されたログファイルを自動的に監視および収集します。

  • アプリケーション独自のロギングニーズに合わせて組み込みロギング機能を使用する

  • ログをさまざまなファイル形式(JSON、CSV、HTMLなど)にエクスポートする

既知ログソース

Log Collection APIは、下記に記載された既知のアプリケーションからログファイルを検出および監視する機能を提供します。

注釈

このリストのアプリケーションログファイルのサポートは進行中です。

このリストは常に拡大しています。あなたがサポートされたいアプリケーションからのログファイルがあるならば、 連絡 ください。

unix

syslogd (eg. auth, daemon, kern, syslog)

unix

journald

unix

rsyslogd

unix

syslog-ng

apache

Apache HTTP Server

tomcat

Apache Tomcat

zookeeper

Apache Zookeeper

kafka

Apache Kafka

nginx

Nginx

mysql

MySQL

postgresql

PostgreSQL

mongodb

MongoDB

couchdb

CouchDB

redis

Redis

aws

Amazon AWS

docker

Docker

django

Django

jenkins

Jenkins

haproxy

HAProxy

nagios

Nagios

cassandra

Cassandra

sinatra

Sinatra

varnish

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"
    }
  ]
},