LogicMonitor クエリ言語 (LMQL) リファレンス
最終更新日 - 21年2026月XNUMX日
LogicMonitor クエリ言語 (LMQL) は、データのクエリ、フィルタリング、視覚化をより柔軟かつ効率的に実行できるようにすることで、プラットフォームを拡張します。LMQL はクエリベースのアプローチを採用しており、大規模なデータセットの分析、視覚化のカスタマイズ、そして有益な洞察の抽出を可能にします。
高度なメトリックウィジェットとメトリックエクスプローラーレポートは、LogicMonitorのLMQLを利用して、ウィジェットで視覚的に表示したいデータやレポートでクエリしたいデータをクエリします。詳細については、以下をご覧ください。 高度なメトリクスウィジェット or メトリクスエクスプローラーレポート.
クエリを構築するときは、インスタント ベクター クエリから開始し、フィルターの組み合わせを使用してデータを絞り込み、必要なデータに対して操作や計算を実行します。
インスタントベクトルクエリ
インスタントベクタークエリは、インスタントクエリを絞り込み、最も関連性の高いデータポイントのみを返すために使用されます。インスタントクエリ自体は、指定されたデータポイントの最新の単一の値を取得します(例: cpuUsage) を、そのデータポイントが存在するすべてのインスタンスにわたって実行します。
インスタントベクタークエリは、フィルターと組み合わせてスコープを限定することで(例えば、結果を特定のリソース、グループ、インスタンスに限定するなど)、より的を絞った効率的な出力を実現します。フィルターを使用しない場合、これらのクエリはインスタンスごとに1つの値を取得するため、非常に大きな結果セットを生成する可能性があります。
インスタントベクタークエリのフィルター
フィルターは、クエリ結果に含めるインスタンスまたはデータポイントを絞り込むためのメカニズムです。フィルターは、プロパティ値、データソース名、インスタンス名、またはデータポイントを使用して、関連する時系列データのみを選択します。
推奨事項: フィルターを使用してインスタント クエリの結果数を制限し、ダッシュボードの過負荷を回避します。
各フィルターは次の要素で構成されます。
- フィルタ名—フィルター名は、インスタントベクタークエリの範囲を制限するために使用するプロパティの名前にすることができます。
- フィルタ演算子—演算子は、フィルター名を値と一致させるために使用するものです。
- 値—演算子とフィルター名を一致させたいものの後に値が追加されます。
複数のフィルターを組み合わせることができます {} カンマを使用して、インスタンスが結果セットに含まれるにはすべてのフィルター条件を満たす必要があります。これにより、特定のユースケースに合わせた正確かつ柔軟なデータ取得が可能になります。
次の表は、LMQL を使用してデータをさらにターゲットするために使用できるさまざまなフィルターを示しています。
| フィルターの種類 | 詳細説明 | 例: |
| オペレーター | LMQL は 4 つの主要な演算子をサポートしています。
おすすめ: 可能な場合は、緩い正規表現ではなく ID または正確なラベルを使用します。 | = (等しい):cpuUsage{system.displayname = "collector_1"!= (等しくない)cpuUsage{system.displayname != "collector_1"}=~ (正規表現一致):cpuUsage{system.displayname =~ "collector.*"}!~ (正規表現が一致しません):cpuUsage{system.displayname !~ "collector.*"} 重要: glob 構文を活用するには、以下を使用する必要があります。 .* |
| プロパティ | プロパティフィルターは、LogicMonitor に保存されているメタデータとプロパティ値を使用します。複数のプロパティをカンマ (,) で区切って組み合わせることができます。 | cpuUsage{lm_pod_name="p02.us-west-2.prod"}cpuUsage{system.categories="tsdb", lm_pod_name="p02.us-west-2.prod"} |
| インスタンス | インスタンス フィルターは、クエリを特定のインスタンスに制限します。 | cpuUsage{instance="cpu core-1"}cpuUsage{instance =~ "cpu core.*"} |
| データソース | DataSource フィルターは、クエリを特定のデータソースに制限します。 注意: サポートされている演算子は | cpuUsage{datasource="NetSNMPCPUwithCores"} |
| データポイント | データポイント フィルターは、単一のクエリで複数のデータポイントを取得します。 注意: サポートされている演算子は | {datapoint =~ "cpuUsage|diskUsage", system.displayname="collector_1"}注意: データポイント名は、{} の外側か内側のどちらかでのみ指定でき、両方で指定することはできません。 |
複数のフィルターを組み合わせて粒度を細かく設定できます。例えば、次のクエリはCPUとディスク使用量の両方のデータポイントを取得し、結果をProductグループに属するリソースに限定し、名前が「cpu core」で始まるインスタンスのみにフィルター処理します。
{datapoint =~ "cpuUsage|diskUsage", system.groups = "Production", instance =~ "cpu core.*"}インスタントベクトルクエリのためのリソース集約関数
リソース集計関数は、複数の時系列にわたる値を単一の時点に集計します。リソース集計関数は単一の値を返すため、結果はグラフ上で単一のデータポイントとして表示されます。
データをグラフとして表示する場合、リソース集計は各タイムスタンプの値を含む1つの時系列を返します。データを大きな数値や円グラフ(1つの値しか表示できない)として表示すると、終了タイムスタンプの最後のサンプル値が集計されて返されます。
次の基本構文を使用して、時系列集計関数を含むクエリを構築できます。
function_name(<instant_query>)LMQL は次のリソース集約をサポートしています。
| 演算 | 詳細説明 |
avg(q) | 返されるすべての時系列の平均を計算します q |
min(q) | 返されるすべての時系列から最小値を見つけます。 q |
max(q) | 返されるすべての時系列から最大値を見つけます q |
sum(q) | 返されたすべての時系列の合計を計算します q |
absent(q) | の値を返します 1 一致するシリーズがない場合 q の値を返します 0 時系列が一致する場合 q |
count(q) | 返される時系列をカウントします q |
たとえば、次のクエリはポッド内のすべてのリソースの最大CPU使用率を返します。 p02.us-west-2.prod:
max(cpuUsage{lm_pod_name="p02.us-west-2.prod"})インスタントベクタークエリのためのリソース集約クエリによるグループ化
リソースの集約は通常、複数の系列を1つの結果にまとめます(例えば、リージョン内のすべてのホストの最大CPU使用率など)。しかし、単一のロールアップではなく、グループごとに集計された値が必要な場合があります。そのために、LMQLは以下をサポートしています。 by() リソース集約関数を使用したグループ化修飾子。
自律的AI by()ホストプロパティ(ポッド名、アプリケーション、リージョンなど)ごとにデータをグループ化できます。関数は各グループ内で個別に適用され、グループごとに1つの結果を返します。複数のプロパティが指定されている場合、LMQLはそれらのプロパティ値の一意の組み合わせに基づいてグループを作成します。
次の基本構文を使用して、グループ化関数を含むクエリを作成できます。
function_name by(property_key [, property_key2, ...]) (instant_query)たとえば、次のクエリは、そのリージョン内の各ポッドについて報告された最大 CPU 使用率を返します。
max by(lm_pod_name) (cpuUsage{auto.aws.region="us-west-2"})推奨事項: (by) 構造化されたロールアップ(たとえば、ポッドごと、アプリごと)用。
ネストされたグループ化
複数のリソース集約を組み合わせ、ある集約が詳細な内訳を行い、その内訳を別の集約がさらにロールアップするようにすることができます。詳細な内訳を行う集約を内部集約、ロールアップを行う集約を外部集約と呼びます。
注意: 外側のステップでグループ化キーを見つけるには、外側の集約内のすべてのラベルが内側の集約にも表示されている必要があります。
たとえば、次のクエリは、最初に(ポッド、アプリケーション)ごとに平均した後、ポッドあたりの平均CPUを返します。 us-west-2:
avg by(lm_pod_name) ( avg by(lm_pod_name, application) (cpuUsage) )前の例でデータをクエリする方法は次のとおりです。
- 内部集合、
avg by(lm _pod_name, application)、各ポッド内のアプリケーションごとの平均を計算します。 - 外側の集合体、
avg by(lm_pod_name)これらのアプリケーション レベルの平均をポッド レベルの平均にまとめます。
注意: 外側の集合体、 lm_pod_name 内部集約セットに含まれます。
インスタントベクトルクエリのための算術式
LMQLは、インスタントベクトルのみのバイナリ演算をサポートしています。これにより、既存のデータポイントから新しい時点の値を導出できます(例えば、空き容量、比率、パーセンテージの計算など)。また、演算とフィルターを組み合わせることで、結果を絞り込み、関連性を維持することもできます。
注意: 算術式は、Advanced Metrics ウィジェットの組み込みクエリ ビルダーまたは Metrics Explorer レポートではサポートされていません。
LMQL は次の式をサポートします。
| Operator | |
+ | 追加 |
- | 減算 |
* | 掛ける |
/ | 分割 |
注意: 2 つのメトリック間の演算は、両方のデータポイントが同じデータ ソースから取得される場合にのみサポートされます。
たとえば、次のクエリは空きディスク領域に関するデータを返します。
StorageSize - StorageUsed推奨事項: 最初にプロパティ フィルターまたはインスタンス フィルターを使用して絞り込み、意図したセットで演算が実行され、高カーディナリティの爆発を回避します。
インスタントベクトルクエリのランキング関数
ランキング関数を使用すると、データセット内で最高値または最低値の時系列を特定できます。これらの関数は内部式を評価し、結果の系列を数値で並べ替え、上位または下位の値のみを返します。 K エントリ。ランキング機能は、最もビジーなインターフェース、CPU を最も多く消費するインターフェース、使用可能な容量が最も少ないリソースなど、極端な項目を強調表示したり、高度なメトリック ウィジェットの視覚的なノイズを削減したりするのに役立ちます。
LMQL は次のランキング操作をサポートしています。
| 操作 | 詳細説明 | 構文 | Arguments | 例: |
topk() | 先頭を返します K 指定された式からの時系列。評価ポイントでの最高数値によってランク付けされます。topk() 最も価値の高いインスタンス(たとえば、最もビジーなインターフェース、最高の CPU 使用率、最大のレイテンシなど)を強調表示する場合。 | topk(k, expression) | k—上位シリーズの復帰数expression—1つ以上の時系列を生成する任意のLMQL式お願い: 最高値を持つK系列のみを返します。K系列より少ない場合は、利用可能なすべての系列を返します。 | 基本的な構文topk(5, avg(cpu.utilization))プロパティ構文による topk by (system.collectorid)(5, pageSizeInBytes)式構文を使用 topk(10, pageSizeInBytes + freeMemoryInBytes*5 + 1)時間経過による集計 topk(50, avg_over_time(totalTimeToDecodeProtocolInNs[10m]))入れ子になった topk(5, sum by (system.collectorhostname)(s3GetCall)) |
bottomk() | を返します ボトム K 与えられた表現から得られた時系列を、 評価ポイントにおける最低の数値。bottomk() 最も使用されていないリソース、最小のスループット、または最低の容量を特定する場合。 | bottomk(k, expression) | k—返される最低ランクのシリーズの数expression—1つ以上の時系列を生成する任意のLMQL式お願い: 最小値を持つK系列のみを返します。K系列より少ない場合は、利用可能なすべての系列を返します。 | 基本的な構文bottomk(3, min(disk.free))入れ子になった bottomk(2, topk(5, max_over_time(latestOffset[1d]))) |
ランキング関数では次の句を使用できます。
| 句 | 詳細説明 | 例: |
BY | ランキングは、グループ化キーによって定義された各グループ内で実行されます。 お願い: 両方 topk の三脚と bottomk 切り捨てる前に、選択したメトリック(または計算された式の値)で並べ替えることで、決定論的な順序付けを保証します。 k 結果。 | 次の構文は、ホスト名ごとに上位 5 つの値を返し、複数のランク付けされたサブセットを生成します。topk by(hostname)(5, metric) |
ランキング機能は、次の機能と組み合わせることができます。
| 組み合わせ | 構文例 |
| グループ式によるランキング | topk(5, sum by (system.collectorhostname)(s3GetCall)) |
| ランキング推移 | topk(10, sum_over_time(requestSubmitted [1d] )) |
| 集計と時間経過関数によるランキング | topk(3, sum by (system.collectorplatform)(topk(5, max_over_time(latestOffset[15m])))) |
| スカラー演算と組み合わせたランキング | totalMemoryInBytes + topk(2, pageSizeInBytes + inUseMemoryInBytes) |
| ランキングは個別に適用され、その後統合される | topk(5, sum by (system.collectorid, system.collectorhostname)(pageSizeInBytes))+ topk(5, sum by (system.collectorid, system.collectorhostname)(inUseMemoryInBytes)) |
| 上位インスタンスのリソース集約 | avg(topk(10, requestSubmitted)) |
ランキングクエリのグラフ動作
グラフには、ランキング関数に応じて次のようにデータが表示されます。
| ランキング | グラフの動作 |
| 時間ベースのランキング | 時間ベースのランキング関数(例: avg_over_time, max_over_time)は、各時系列を単一のスカラースコアに集約します。ランキングはこのスカラー値を使用し、グラフではエンティティごとに単一のフラットな値をプロットします。 |
| 時間ベースではない表現 | ランキングは最後の値のセマンティクスに基づいていますが、グラフには選択されたすべてのシリーズの完全な履歴トレンド ラインが表示されます。 |
| ネストされたランキング | 評価順序は保持されます。各ランキングレイヤーは、前のランキングレイヤーの結果に基づいて動作します。 |
範囲ベクトルクエリ
レンジベクタークエリは、インスタントベクタークエリの概念を拡張したものです。各メトリックの最新のサンプルを返すのではなく、現在のタイムスタンプから指定された期間にわたるサンプルの範囲を取得します。期間は角括弧([]クエリの後に()を付けます。フィルターはクエリするデータを定義しますが、範囲ベクトルクエリは各データに対して取得する履歴データの量を定義します。
注意: 範囲ベクトル クエリを活用する Metrics Explorer レポートを作成すると、レポート出力には各メトリックの最新のサンプルのみが含まれます。
たとえば、次の範囲ベクトル クエリは、過去 5 分間の CPU 使用率サンプルを取得します。
cpuUsage[5m]期間が明示的に指定されている場合、範囲クエリはグローバル時間ウィンドウをオーバーライドします。境界は両端を含むため、範囲の開始点と終了点のサンプルが含まれます。
範囲ベクトル クエリでは、次の時間単位がサポートされています。
| ユニット | 詳細説明 |
| ms | ミリ秒 |
| s | SECONDS |
| m | MINUTES |
| h | 営業時間 |
| d | 日 注意: 1日は24時間を表します。 |
| w | ウィークス 注意: 1週間は7dを表します。 |
| M | ヶ月 注意: 1 か月は 30 ペンスを表します。 |
| Y | 年 注意: 1 年は 365 日を表します。 |
LMQL範囲ベクトルクエリは、時系列ごとに最大1,000個のデータサンプルを返します。1,000個を超えるデータサンプルがある場合は、カスタムグラフウィジェットと同様に、平均(avg)関数を使用して1,000個のポイントに統合されます。
範囲クエリの時系列集計関数
時系列集計関数は、範囲ベクトルを受け取り、そのウィンドウ内のすべてのサンプルを時系列ごとに1つの値に集約します。これにより、長時間のクエリでデータサンプルを統合できます。時系列集計関数は時系列ごとに1つの値を返すため、結果はグラフ上で選択された時系列ごとに1つのデータポイントとして表示されます。
基本構文を使用して、時系列集計関数を含むクエリを作成できます。
function_name( <range-query> )LMQL は次の時系列集計をサポートしています。
| 演算 | 詳細説明 |
avg_over_time(<range-vector>) | 指定された期間に収集されたすべてのサンプリングデータの平均値を計算します |
min_over_time(<range-vector>) | 指定された期間に収集されたすべてのサンプリングデータの最小値を見つけます |
max_over_time(<range-vector>) | 指定された期間に収集されたすべてのサンプリングデータの最大値を見つけます |
sum_over_time(<range-vector>) | 指定された期間に収集されたすべてのサンプリングデータの合計を計算します |
absent_over_time(series_selector[d]) | 返品 1 指定された後読みウィンドウの場合 d 生のサンプルは含まれていません返品 0 その他のシナリオ |
present_over_time(series_selector[d]) | 返品 1 指定された後読みウィンドウに少なくとも1つの生データがある場合 d返品 0 空の結果の場合 |
たとえば、次のクエリは、指定された時間範囲の時系列データを取得します。
sum_over_time( cpuUsage{system.displayname = "collector_1"} [4w] )オフセット修飾子
LMQLクエリはデフォルトで、現在の時刻からデータを評価します。オフセット修飾子は、評価時刻を指定された期間だけ遡らせることで、履歴データの取得を可能にします。これは、インスタントクエリまたは範囲ベクトルクエリに適用できます。オフセット修飾子を含むクエリは、以下の基本構文を使用して作成できます。
<instant_query | range_query> offset <duration>以下では、さまざまなシナリオでオフセット修飾子を活用する方法について説明します。
| クエリー | 詳細説明 |
cpuUsage offset 10m | 過去10分時点のCPU使用率を評価し、そこから24時間分のデータをグラフとして表示する、インスタントベクタークエリです。グラフで使用されていない場合、クエリは過去10分時点のタイムスタンプを持つ1つのサンプル値としてデータを表示します。 |
cpuUsage{system.displayname="collector_1"} offset 10m | CPU使用率を返すフィルタリングされたインスタントベクトルクエリ collector_1 10分前から |
cpuUsage{system.displayname="collector_1"}[5m] offset 10m | 過去 10 分から 5 分間の CPU 使用率を取得する範囲ベクトル クエリ |
注意: オフセット修飾子はグローバル時間ウィンドウをオーバーライドし、範囲ベクトルクエリと同じ時間単位を使用します。
高度なクエリと構成
情報を取得する際に制御、正確性、複雑さが必要な場合は、LMQL で高度なクエリと構成を使用できます。
以下では、一般的な種類の高度なクエリと、そのクエリが役立つユースケースについて説明します。
| クエリの種類 | クエリの例 | 詳細説明 | Use Case |
| 集計値の集計 | sum( max(cpu) ) + sum( max(fail) ) | 集計を別の集計の結果に適用します。 | すでに要約された信号をまとめます。 |
| グループ化結果の合計 | max by(system.displayname)(aliveTsf) + max by(system.displayname)(inactiveTsf) | 算術演算を実行する(+, -, *, /2つ以上のグループ化集計セット間の比較(グループ化プロパティの値の一致)によって結果を計算します。 | 整列されたグループ化ディメンション (表示名ごとなど) を比較または結合します。 |
| Group-Byの集計 | max( max by(lm_pod, system.displayname)( s3callsFailed{system.displayname=~"tsdb.*"} ) ) | 集計をネストして、上位レベルのグループごとに単一の「最良」または「最悪」を抽出します。 | グループの全メンバーから単一の「最悪」または「最良」のケースを抽出します。 |
| ネストされたグループ化と複数フィールドのフィルタリング | max by(lm_pod)( max by(lm_pod, system.displayname)( s3callsFailed{system.displayname=~"tsdb.*"} ) )sum by(system.hoststatus)( max by(system.hoststatus, system.displayname)( s3callfail ) ) | ラベル フィルタリングと組み合わせて複数のグループ化レベルを適用します。 | まず、詳細レベル (たとえば、ポッド + 表示名別) でメトリックを計算し、次に上位レベル (たとえば、ポッドのみ別) に折りたたみます。 |
リテラルクエリ
LMQLは、柔軟性よりも正確さを重視する場合、純粋なリテラルのみを評価したり、定数とベクトルを混在させたりすることができます。これにより、LogicMonitorは入力した内容と正確に一致することを確認できます。リテラルクエリは、簡単な計算を実行したり、メトリック全体にスケーリング係数やオフセットを適用したり、正規化、しきい値、アラートロジックのためにメトリックベクトルと定数を混在させたりする必要がある場合に役立ちます。
以下では、LMQL が実行できるリテラル クエリを例と出力とともに説明します。
| クエリの種類 | クエリの例 | 詳細説明 | 出力 |
| 純粋なリテラル算術 | 2 + 3 | 両方のオペランドは定数であり、時間ディメンションやラベルはありません。 LMQL は計算機と同様に直接評価します。 結果は常に 1 つのスカラーになります。 | グラフ結果: 値で平坦な一定線 5即時結果: スカラー 5 |
| 定数 + メトリックベクトル | 2 + activeTsf | 追加 2 各シリーズに activeTsf.LMQLは要素ごとの加算を適用します。 activeTsfLMQLは追加します 2.ラベルオン activeTsf 保存されます。 | グラフ結果: 各 activeTsf シリーズに 2 が加算され、線としてプロットされます。即時結果: 時系列ラベルごとに1つのスカラー、それぞれ latest(activeTsf) + 2.If activeTSf 次のシリーズがあります:system.displayname = "collector_1" → 最新 = 7system.displayname = "tsdb_1" → 最新 = 10その後: 『Brooklyn Galaxy』のために、倪氏はブルックリン美術館のコレクションからXNUMX点の名品を選び、そのイメージを極めて詳細に描き込みました。これらの作品は、彼の作品とともに中国ギャラリーに展示されています。彼はXNUMX年にこの作品の制作を開始しましたが、最初の硬貨には、当館が所蔵する collector_1: 2 + 7 = 9『Brooklyn Galaxy』のために、倪氏はブルックリン美術館のコレクションからXNUMX点の名品を選び、そのイメージを極めて詳細に描き込みました。これらの作品は、彼の作品とともに中国ギャラリーに展示されています。彼はXNUMX年にこの作品の制作を開始しましたが、最初の硬貨には、当館が所蔵する tsdb_1: 2 + 10 = 12 |
| リテラルによるメトリックスケーリング | activeTsf * 7 | 各サンプルの activeTsf 定数を掛け合わせた 7.単位の変換、メトリックの再スケーリング、重み係数の適用に役立ちます。 元のメトリックのラベルは保持されます。 | グラフ結果: スケール線 即時結果: ラベルごとに1つのスカラー、 latest(activeTsf) × 7If activeTSf 次のシリーズがあります: system.displayname = "collector_1" → 最新 = 7system.displayname = "tsdb_1" → 最新 = 10その後: collector_1: 7 * 7 = 49tsdb_1: 7 * 10 = 70 |
比較、括弧、論理(集合)演算子
LMQLは、メトリクス、リテラル、式の比較と論理(集合)演算をサポートしています。これにより、LMQLは生の値を超えて拡張され、条件式、フィルター、アラートのようなクエリを構築できるようになります。
LMQL で活用できる操作の種類を次に示します。
| 操作のタイプ | 詳細説明 | クエリの例 |
| 比較演算子 | 次のように、ベクトル内の各サンプルをスカラーまたは別のベクトルと比較します。==, !=, >, <, >=, <=ブール修飾子を利用して、条件が真の場合に時系列を返すことができます( 1) または偽 (0) を各ポイントに対して次のように計算します。bool推奨事項: 結果を 0 または 1 に変換するには bool を使用します。bool ではラベルのマッチングに柔軟性がありません。 比較演算子は、条件が満たされた場合、常に最初のオペランドの値を返します。条件が満たされなかった場合は、0 を返します。 | 次のリターン 1 if activeTsf > 100000、それ以外 0:activeTsf > 100000以下、括弧内は (aliveTsf + inactiveTsf) 最初に評価される。 activeTsF 要素ごとに合計と比較されます。activeTsf > (aliveTsf + inactiveTsf)次のリターン 0 or 1 コラボレー up 正確です 0:up == 0以下は、ベクトル ラベルが異なる場合でも、比較を純粋にブール値として扱い、一致するすべてのシリーズのシリーズを返します。 up == bool 0使用している場合 bool 比較演算子を含むキーワード、 1 条件が満たされた場合に返されます。次の例では、activeTsfの値が100より大きい場合は1が返されます。値が100より小さい場合は0が返されます。activeTsf > bool 100 |
| 括弧 | 括弧 () 評価の順序を制御します。算術と比較を混在させる場合に便利です。 推奨事項: 意図を明確にするために、複雑な数式を括弧で囲みます。 | 以下では、 active + inactive 最初に計算され、次に平均がより大きいかどうかがチェックされます aliveTsF:(activeTsf + inactiveTsF) / 2 > aliveTsF |
| 論理演算子 | LMQL は、ブール時系列を組み合わせるために次の論理演算子をサポートしています。
正しい結果を得るには、両辺がブールベクトル (bool キーワードを使用した比較の結果) である必要があります。 各ポイントの各位置揃えラベルのブール系列 (true の場合は 1、false の場合は 0) を返します。 お願い : ゼロ以外の値は TRUE ゼロは FALSEしたがって、両方のオペランドがゼロでない場合、&& は「1」を返します。どちらかのオペランドが0でない場合は、|| 「1」を返します。 | 次の例は、active が 0 より大きく、inactive が 0 の場合に true (1) を返します。(activeTsf > bool 0) && (inactiveTsf == bool 0)以下は、どちらかの条件が満たされた場合に true (1) を返します。 (activeTsf > bool 0) || (inactiveTsf == bool 0) |