イベントのタイムスタンプ
Last updated
Last updated
この記事では、Nexthink Platformが、データストレージ層におけるイベントのタイムスタンプを、Collectorが送信するパケットの受信時間と、各パケット内に保存されている個々のイベントの時間情報を組み合わせてどのように計算するかを説明します。
Collectorは、興味のあるイベントに反応し、それをメモリに記録します。 その後、収集したイベントを定期的に、または十分な量がたまったときにNexthinkデータストレージ層に送信します。 Collectorは、システムコールのインターセプトなど、さまざまな技術を使用してインストールされているシステムの活動を検出し、イベントが発生した瞬間を正確に特定できるようにします。
このデバイス上のイベントのタイムスタンプ付けは、最後のシステムブートから経過した時間に基づいて行われます。 したがって、Collectorは相対時間を使用して従業員のデバイスのイベントにタイムスタンプを付けます。 Collectorが使用する時間が相対的であるという事実は、データストレージ層の正確なタイムスタンプを計算する上で重要ではありません。
Collectorは、十分なイベントとそれに対応するタイムスタンプを収集すると、ネットワークパケットを構築し、それをデータストレージ層に送信します。 送信直前に、Collectorはパケット内に相対時間を使ってまたタイムスタンプを設定します。 したがって、Collectorが送信するすべてのパケットには、
パケットに含まれる各個別イベントのタイムスタンプが含まれています。
パケット自体の一般的なタイムスタンプが1つあります。
データストレージ層は、パケットの時間と各個別イベントの時間の差を使用して、イベントのグローバルタイムスタンプを計算します。
データストレージ層がCollectorからパケットを受信すると、システム時間を使用して受信時刻が記録されます。 イベントのグローバル時間を計算するために、Platformは、従業員のコンピュータからPlatformまでのCollectorパケットの送信時間を無視できると仮定します。 このようにして、Collectorがパケットを送信した絶対時間が、データストレージ層におけるパケットの受信の絶対時間と同じであると考慮されます。 したがって、Collectorが送信直前にパケットに設定した時間は、システムブートに対しての従業員機のローカル時間であり、データストレージ層のパケット受信時間と等しいです。 各イベントの発生時間を得るために、データストレージ層は、パケットのローカル時間と各イベントのローカル時間の差を受信時間から引きます。
データストレージ層に受信されたイベントが、必ずしも順序通りではないことに注意してください。 最も一般的なケースは、短い時間間隔で異なるCollecterから2つのパケットが受信される場合です。 おそらく2つのパケットには時間が重なるイベントがありますが、Platformは最初のパケットの後に2番目のパケットのすべてのイベントを処理します。
また、データストレージ層は常に現在の時間に対して過去のイベントを挿入します。 これは、Platformがまだ発生していないイベントを受け取ることができないため、明らかです。 しかし、過去の時点があまりに離れているイベントに対しては、Platformはインメモリデータベースを更新できません。これは、あまりにもコストがかかるためです。 データストレージ層は、現在の時刻から30分以上前のイベントを拒否します。
しかし、ローカルネットワーク内のCollectorでこのようなケースは非常にまれであり、Collectorをホストするデバイスの問題を示唆することが多いです。
Collectorは、TCP接続に関して、そのタイムスタンプの設定を他のすべてのイベントとは異なります。 他のすべてのイベントは、何らかの活動を開始するとすぐにそのタイムスタンプが設定されます。 一方で、従業員デバイスがサーバーにTCP接続を開くと、CollectorはTCP接続イベントのタイムスタンプを設定するために接続が確立されるのを待ちます。