eval

evalコマンドを使用して、式の値を計算し、その値を新しいフィールドに表示します。

ノート

  • statsコマンドは既存のフィールドに基づいて統計を計算しますが、evalコマンドは既存のフィールドおよび任意の式を使用して新しいフィールドを作成します。

  • indexofsubstrなどの文字列処理関数は、リソースを大量に消費します。このため、多数のログ・レコードに対してこれらの関数を指定してevalコマンドを実行するか、大きいフィールド値を実行することはお薦めしません。かわりに、ログ・ソースの拡張フィールド定義(EFD)またはラベルを使用してこれらの値を抽出します。ソースでの拡張フィールドの使用およびソースでのラベルの使用を参照してください。

  • evalコマンドで使用されるフィールド名に、文字[および]が含まれていないことを確認してください。

構文

コマンドで使用可能な演算子およびファンクション

*|eval <new_field_name>=<expression>

次の表に、evalコマンドで使用できる演算子を示します。

カテゴリ

算術演算子

+, -, *, /, %

比較演算子

=, !=, <, >, <=, >=

論理演算子

and, or, not

条件演算子

if(<expression>,<expression>,<expression>)

複数比較演算子

in, not in

次の表に、evalコマンドで使用できるファンクションを示します。

カテゴリ

文字列ファンクション

  • capitalize(String)

    文字列の最初の文字を大文字にします。

  • concat(String, String)

  • contains(String, String)

  • encode64(String)

  • indexof (String, String [,int])

    indexof関数の詳細を参照してください。

  • lastindexof(String, String, int)

    lastindexof関数の詳細を参照してください。

  • length(String)

  • literal(String)

  • lower(String)

  • ltrim(String, Character)

  • replace(String, String, String, String, String, ..)

    replace Function Detailsを参照してください。

  • reverse(String)

  • rtrim(String, Character)

  • substr(String, int [, int])

    substr関数の詳細を参照してください。

  • todate(String [, format])

  • toduration(String)

  • tonumber(String)

  • trim(String)

  • trim(String, Character)

  • upper(String)

  • urlDecode(String)

  • urlEncode(String)

  • url(String [, Name [, Parameter]])

    urlファンクションの詳細およびOracle定義URLの短縮カットを参照してください。

数値ファンクション

日付ファンクション

  • dateadd(date, property, amount)

  • dateset(date, property, value [, property, value])

  • formatdate(date [,format])

  • now()

whereコマンドと同様に、人間が読める文字列を使用して問合せの時間を操作できます。たとえば、「10分後」という名前の新しいフィールドを「時間」フィールドの値より10分前に作成するには:

* | eval '10mins Later' = Time + 10mins

比較でのユーザーフレンドリな時間文字列を参照してください。

条件ファンクション

  • cidrmatch(String, String)

  • if(<expression>, <expression>, <expression>)

ハッシュ・ファンクション

  • md5(<value to hash>)

  • sha1(<value to hash>)

  • sha256(<value to hash>)

  • sha512(<value to hash>)

ノート: md5ファンクションおよびshaファンクションは現在、小文字のフィールド値を操作しています。

ノート

  • concat()ファンクションでは、整数、浮動小数点数、長整数などの数値データ型を入力できます。数値フィールドは、対応する文字列値に自動的に変換されます。

  • ||を使用して、n個の入力を連結できます。ここでも、対応する文字列値に自動的に変換される数値データ型を入力できます。

パラメータ

次の表に、このコマンドで使用されるパラメータとその説明を示します。

パラメータ 説明

new_field_name

式の計算値を表示するフィールドの名前を指定します。

expression

値を計算する必要がある式を指定します。

次に、evalコマンドのいくつかの例を示します。

*|eval newField = 'foo'
*|eval newField = 123
*|eval newField = upper(Target)
*|eval newField = length('hello world')
*|eval s =capitalize(severity)
*|eval newField = concat(host, concat (':', port))
*|eval n = contains(uri, '.com')
*|eval s = encode64(uri)
*|eval s = reverse(Command)
*|eval newField = host || ':'|| port
*|eval newField = round(123.4)
*|eval newField = floor(4096/1024)+Length
*|eval newField = if (max(Length)(Target), length(Severity)) <= 20, 'OK', 'ERROR')
*|eval newField = urlDecode('http%3A%2F%2Fexample.com%3A893%2Fsolr%2FCORE_0_0%2Fquery')
*|eval s = urlEncode(uri)
*|eval newField = 'Host Name (Destination)' in (host1, host2)

次の例は、フィールドsrvrhostipのIPアドレスをサブネット範囲と比較します。

*|eval newField = if (cidrmatch(srvrhostip, '192.0.2.254/25') = 1, 'local', 'not local')

次の例は、文字列“Target”を返します。

*|eval newField = literal(Target)

次の例は、両端からスペースとタブを削除します。

*|eval newField = trim(Label)

次の例は、両端から一致する文字を削除します。

*|eval newField = trim('User Name',h)

次の例は、左端から一致する文字を削除します。

*|eval newField = ltrim('Error ID',0)

次の例は、右端から一致する文字を削除します。

*|eval newField = rtrim('OS Process ID',2)

次の例は、フィールドdateStart Dateに設定し、日付のフォーマットをMM/dd/yyyy HH:mmとして定義します。

*|eval date = toDate('Start Date', 'MM/dd/yyyy HH:mm')

関数 toDateは、次のようにエポックを処理するためにも使用できます。

... | where 'Start Time' > toDate(1405544998000)

次の例は、フィールドdurationの値を1.30に設定します。

*|eval duration = toduration("1.30")

次の例は、フィールドdurationの値を、End TimeStart Timeの差異の数値に設定します。

*|eval duration = formatDuration('End Time' - 'Start Time')

次の例は、日付ファンクションの使用方法を示しています。

*| eval lastHour = dateAdd(now(), hour, -1)
*| eval midnight = dateSet(now(), hour, 0, minute, 0, sec, 0, msec, 0)
*| eval timeOnly = formatDate(now(), 'HH:mm:ss')
*| eval now = now()

evalコマンドでmd5、sha1、sha256およびsha512ハッシュ・ファンクションを使用して、ログ・データをフィルタできます。次の例は、フィールドuserの値を値sha1("jane")に設定します。

*|eval user = sha1("jane")

次の例では、16進数を10進数に変換し、nは255と評価されます。

* | eval n = toNumber('0xFF')

次の例では、8進数を10進数に変換し、nは10と評価されます。

* | eval n = toNumber('012')

unit関数の例

簡単な例をいくつか示します。

* | eval newField = unit('Content Size', KB)
* | eval 'File Size (bytes)' = unit('File Size', 'byte')
* | eval 'File Size (KB)' = unit('File Size'/1024, 'kb')
* | eval 'File Size (MB)' = unit('File Size'/(1024*1024), 'mb')
* | eval 'Time Taken (Sec)' = unit(Time/1000, 'SEC')

バイト、通貨、期間などの共通単位の例:

* | eval Vol = unit('Content Size Out', byte) | stats sum(Vol) as 'Total Volume'
* | eval Sales = unit('Sales Amount', currency_usd) | stats sum('Sales') as 'Total Sales'
* | eval 'Disk Read Time' = unit('Disk Read Time (millis)', ms) | stats avg('Disk Read Time') as 'Avg Disk Read Time'

最良の結果を得るには、「フォーマット番号」オプションを選択して、タイル・ビジュアライゼーションで前述の3つの問合せを実行します。

サイズまたは期間タイプが単位のフィールドは、リンク分析チャート、追加フィールド・ヒストグラム、リンク表およびタイル・ビジュアライゼーションの値の書式設定に使用されます。

'Log Source' = 'FMW WebLogic Server Access Logs'
| link span = 5minute Time, Server
| stats avg('Duration')     as 'Raw Avg. Duration'
        avg('Content Size') as 'Raw Avg. Transfer Size'
| eval 'Average Duration'      = unit('Raw Avg. Duration', ms)
| eval 'Average Transfer Size' = unit('Raw Avg. Transfer Size', byte)
| classify 'Start Time', 'Average Duration', 
          'Average Transfer Size' as 'Response Time vs. Download Sizes'

「US Dollars」、「数千US Dollars」、「数百万US Dollars」、または「数十億US Dollars」を含むフィールドをそれぞれマークします。

| eval 'Amount in USD' = unit('Sales Price', currency_usd)
| eval 'Amount in Thousands (USD)' = usd('Quarterly Sales', currency_usd_thousand)
| eval 'Amount in Millions (USD)' = usd('Annual Profit', currency_usd_million)
| eval 'Amount in Billions (USD)' = usd('Annual Sales', currency_usd_billion)

unitファンクションでサポートされるタイプ

単位名:

  • PERCENT | PCT
  • データ・サイズ:
    • BYTE
    • KILOBYTE | KB
    • MEGABYTE | MB
    • GIGABYTE | GB
    • TERABYTE | TB
    • PETABYTE | PB
    • EXABYTE | EB
  • 時間:
    • MILLISECOND | MS
    • S | SEC | SECS | SECOND | SECONDS
    • M | MIN | MINS | MINUTE | MINUTES
    • H | HR | HRS | HOUR | HOURS
    • D | DAY | DAYS
    • W | WEEK | WEEKS
    • MON | MONTH | MONTHS
    • Y | YR | YRS | YEAR | YEARS
    • MICRO | µs
  • 指数:
    • WATT
    • KILOWATT | kW
    • MEGAWATT | MW
    • GIGAWATT | GW
    • TERAWATT | TW
    • PETAWATT | PW
    • EXAWATT | EW
  • 温度:
    • KELVIN | K
    • CELSIUS | C
    • FAHRENHEIT | F
  • 頻度:
    • HERTZ | Hz
    • KILOHERTZ | kHz
    • MEGAHERTZ | MHz
    • GIGAHERTZ | GHz
    • TERAHERTZ | THz
    • PETAHERTZ | PHz
    • EXAHERTZ | EHz

unit関数でサポートされる通貨タイプ

この関数は、linkコマンドでのみevalコマンドに使用できます。一般的なシナリオでの関数の使用については、evalコマンドのリンク例を参照してください。

次の書式を使用して通貨単位を指定します。

eval <New Field> = unit(<Field>, currency_<ISO-4217 Code>)
eval <New Field> = unit(<Field>, currency_<ISO-4217 Code>_k)
eval <New Field> = unit(<Field>, currency_<ISO-4217 Code>_m)
eval <New Field> = unit(<Field>, currency_<ISO-4217 Code>_b)

接尾辞_k_mおよび_bは、それぞれ数千、百万または数十億の通貨を示すために使用されます。通貨コードの完全なリストは、ISO標準を参照してください。

NLS_Territory 通貨
アフガニスタン AFN
アルバニア すべて
アルジェリア DZD
アメリカ 米ドル
アンゴラ AOA
ANTIGUA AND BARBUDA XCD
アルゼンチン ARS
アルメニア AMD
アルーバ AWG
オーストラリア オーストラリア・ドル
オーストリア ユーロ
アゼルバイジャン語 アジソン病
バハマ BSD
バーレーン 注意欠陥・多動性障害
バングラデシュ BDT
バルバドス BBD
ベラルーシ BYN
ベルギー ユーロ
ベリーズ BZD
バミューダ 初期測定データ
ボリビア 生年月日
ボスニア・ヘルツェゴビナ BAM
ボツワナ BWP
ブラジル すぐ戻ります
ブルガリア BGN
カンボジア KHR
カメルーン XAF
カナダ CAD
ケイマン諸島 KYD
チリ CLP
中国 CNY
コロンビア コピー
CONGO BRAZZAVILLE XAF
コンゴ・キンシャサ CDF
コスタリカ 中華人民共和国
クロアチア HRK
キュラソー ANG
キプロス ユーロ
チェコ共和国 CZK
デンマーク DKK
ジブチ DJF
ドミニカ XCD
ドミニカ共和国 ドップ
エクアドル 米ドル
EGYPT エレクトロニクス・ゲートウェイ・プロトコル
EL SALVADOR セキュリティコード
エストニア ユーロ
エチオピア ETB
フィンランド ユーロ
フランス ユーロ
FYR MACEDONIA MKD
ガボン XAF
ジョージア ゲル
ドイツ ユーロ
GHANA 電磁波過敏症
ギリシャ ユーロ
グレナダ XCD
グアテマラ GTQ
ガイアナ GYD
アジアン HTG
ホンジュラス HNL
香港 HKD
ハンガリー トラック
アイスランド ISK
インディアナ INR
インドネシア IDR
アイラン IRR
IRAQ 知能指数
アイルランド ユーロ
イスラエル ILS
イタリア ユーロ
象牙海岸 XOF
ジャマイカ JMD
日本 日本
ヨルダン JOD
カザフスタン KZT
KENYA KES
韓国 KRW
クウェート KWD
キルギスタン KGS
ロス LAK
ラトビア ユーロ
レバノン LBP
リビア 前年同期
LIECHTENSTEIN CHF
リトアニア ユーロ
ルクセンブルク ユーロ
マカオ オブジェクト指向
マラウイ MWK
マレーシア MYR
モルジブ MVR
マルタ ユーロ
モーリタニア MRU
モーリシャス 男性
メキシコ MXN
モルドバ MDL
モンテネグロ ユーロ
モロッコ カナダドル
モザンビーク 中性子
MYANMAR MMK
ナミビア ナッド
NEPAL NPR
ニュージーランド NZD
ニカラグア NIO
ナイジェリア NGN
ノルウェー NOK
オマン語 OMR
パキスタン ペナルティーキック
パナマ PAB
パラグアイ PYG
ペルー ペン
フィリピン PHP
ポーランド 損益
ポルトガル ユーロ
プエルトリコ 米ドル
カタル QAR
ルーマニア ロン
ロシア RUB
セントクリストファーおよびネイビス XCD
セントルシア XCD
サウジアラビア SAR
セネガル XOF
セルビア 総合ディジタル通信網サービス
シエラレオネ SLL
シンガポール SGD
スロバキア ユーロ
スロベニア ユーロ
ソマリア SOS
南アフリカ ZAR
南スーダン スタンドアロン販売店
パイン ユーロ
スリランカ LKR
SUDAN SDG
スリナム SRD
スワジランド SZL
スウェーデン SEK
スイス CHF
シリア SYP
台湾 TWD
タンザニア TZS
タイ THB
オランダ ユーロ
トリニダード・トバゴ TTD
チュニジア TND
トルコ TRY
トルコ TMT
ウガンダ 日本語族
ウクライナ UAH
米国 アード
イギリス GBP
ウルグアイ UYU
ウズベキスタン UZS
ベネズエラ VES
ベトナム VND
YEMEN はい
ザンビア ZMW
ジンバブエ ZWL

indexofファンクションの詳細

index0f関数の構文:

indexof (String, String [,int])

indexof (String、 String [、start_pos]): 索引数は0で始まり、start_pos (指定されている場合)から始まる一致のインデックスを返し、一致がない場合は-1を返します。

次の例は、フィールドnewFieldの値をuri文字列内の.comの位置に設定します。

*|eval newField = indexOf(uri, '.com')

ユースケース: OCI監査ログの「パス」フィールドからAPIパスの関連部分を抽出します

「パス」フィールドには、/apis/coordination.k8s.io/v1/namespaces/default/leases/oracle.com-ociのような値が含まれます。

前述のフィールドから値coordination.k8sを抽出するには、次のステップを実行します。

  • indexOf()関数を使用して、1番目と2番目の/の位置を検索します。
  • 3番目の/の位置を検索します。
  • substr()関数を使用して、2番目の/の後に3番目の/までの値を抽出します。
'Log Source' = 'OCI Audit Logs'
| eval firstPos = indexOf(Path, '/')
| eval secondPos = indexOf(Path, '/', firstPos + 1)
| eval API = substr(Path, secondPos + 1, indexOf(Path, '/', secondPos + 1))
| link Path, API

出力例:


ユースケース: OCI監査ログの「パス」フィールドからAPIパスの関連部分を抽出します

lastindexofファンクションの詳細

lastindexof関数の構文:

lastindexof(String, String, int)

lastindexof (String、 String [、 end_pos]): 索引数は0で始まり、end_pos (指定されている場合)の前の最後の部分文字列のインデックスを返し、一致がない場合は-1を返します。end_pos引数はオプションです。

lastindexof関数の使用例を次に示します。

*|eval n = lastindexof(uri, '.com')

ユースケース: OCI監査ログの「タイプ」フィールドから「面積」を抽出します

「タイプ」フィールドには、com.oraclecloud.computeApi.GetInstanceのような値が含まれます。

前述の値からcomputeAPIを抽出するには、次のスキームを使用できます。

  • lastIndexOf()を使用して、最後の.の位置を特定します。
  • このオフセットから、別のlastIndexOf()を使用して、前の.の位置を特定しますが、検索先からのオフセットを指定します。
  • substr()を使用して、これら2つの位置の間の値を抽出します。
'Log Source' = 'OCI Audit Logs' 
| eval lastDot = lastIndexOf(Type, '.') 
| eval prevDot = lastIndexOf(Type, '.', lastDot - 1) 
| eval Area    = substr(Type, prevDot + 1, lastDot) 
| link Type, Area

出力例:


ユースケース: OCI監査ログの「タイプ」フィールドから領域を抽出します

replaceファンクションの詳細

replace関数の構文:

replace(String, String, String, String, String, ..)

replaceは、1つの関数で複数の置換をサポートします。replace関数の使用例を次に示します。

  • *|eval newField = replace('aabbcc', 'bb', 'xx')
  • *|eval newField = replace('aabbcc', 'bb', 'xx', 'cc', 'yy')
  • 単一のreplace関数の複数の置換アクションの例:

    * | eval CopiedURL = 'https://cloud.oracle.com/loganalytics/explorer?viz=<VIZ>&encodedQuery=<QUERY>&startTime=<START_TIME>&endTime=<END_TIME>&region=us-phoenix-1&tenant=testtenant'| eval Query = encode64('* | stats count as "Log Records" by "Log Source"') 
    | eval 'Start Epoch' = toString(toNumber(toDate(dateRelative(30day)))) 
    | eval 'End Epoch' = toString(toNumber(now())) 
    | eval Viz = pie 
    | eval URL = replace(CopiedURL, '<VIZ>', Viz, '<QUERY>', Query, '<START_TIME>', 'Start Epoch', '<END_TIME>', 'End Epoch')

substrファンクションの詳細

substr関数の構文:

substr(String, int [, int])

substr(String、 start_pos、 end_pos - 1): 索引数はstart_posで始まり、end_pos - 1で終わります。

次の例では、newFieldaabbccのサブ文字列で、開始索引(包含)は2、終了索引(排他)は4です。文字列の場合、索引数は0で始まることに注意してください。したがって、結果のサブ文字列はbbです。

*|eval newField = substr('aabbcc', 2, 4)

substr関数が使用されるユースケースについては、「indexof関数の詳細」および「lastindexof関数の詳細」を参照してください。

urlファンクションの詳細

urlファンクションの構文:

url(String, Name, Parameter)

NameParameterの値はオプションです。

  • String: これは、URLまたは事前定義された短縮名の1つです。例:
    eval Link = url('https://www.oracle.com')
  • Name: URLのオプション名。例:
    eval Link = url('https://www.oracle.com', 'Oracle Home Page')
  • Parameter: Stringにショートカットを使用する場合のオプション・パラメータ。例:
    eval Link = url('tech', 'Search Oracle', 'ORA-600')

url関数の使用例を次に示します。

  • * | stats latest(Status) as Status
     | eval ‘HTTP Status Code’ = url(‘https://www.google.com/search?q=http+code+’, Status, Status)
  • Status != null
     | eval 'HTTP Status Code' = url('https://www.google.com/search?q=http+code+', Status, Status)
     | stats count by Status

linkコマンドの後にurl関数を使用する例:

  • * | link status
     | eval ‘HTTP Status Code’ = url(‘https://www.google.com/search?q=http+code+’, Status, Status)
  • * | link Type
     | stats latest(Status) as Status
     | eval ‘HTTP Status Code’ = url(‘[https://www.google.com/search?q=http+code+]’, Status, Status)

Oracle定義のurlショートカット

次のOracle定義のショートカットは、evalコマンドのurl関数で使用できます。

ショートカット URLと説明

または

検索:oracle

https://www.google.com/search?q=site:oracle.com%20

指定した文字列のすべてのoracle.comを検索するためのリンクを生成します

eval Help = url('ora', 'Search Oracle', 'ORA-600')

eval Help = url('search:oracle', 'Search Oracle', 'ORA-600')

技術

オラクルのテクノロジー

https://community.oracle.com/tech/search?query=

Oracleテクノロジ・フォーラムを検索するためのリンクを生成します

eval Help = url('tech', 'Search Oracle Tech Forums', 'ORA-600')

eval Help = url('oracle-tech', 'Search Oracle Tech Forums', 'ORA-600')

モスク

オラクル- モスクワ

https://community.oracle.com/mosc/search?query=

My Oracle Supportフォーラムを検索するためのリンクを生成します

eval Help = url('mosc', 'Search Oracle Support', 'ORA-600')

eval Help = url('oracle-mosc', 'Search Oracle Support', 'ORA-600')

ググる https://www.google.com/search?q=

Googleを使用して検索するリンクを生成します

eval 'More Info' = url('google', 'Search using Google', 'ORA-600')

飛ぶ https://www.bing.com/search?q=

Bingを使用して検索するリンクを生成します

eval 'More Info' = url('bing', 'Search using Bing', 'ORA-600')

ddg

カモノハシ

https://duckduckgo.com/?q=

DuckDuckGoを使用して検索するリンクを生成します

eval 'More Info' = url('ddg', 'Search using DuckDuckGo', 'ORA-600')

eval 'More Info' = url('duckduckgo', 'Search using DuckDuckGo', 'ORA-600')

まあまあです

スタックオーバーフロー

https://stackoverflow.com/search?q=

StackOverflowで検索するリンクを生成します

eval 'More Info' = url('so', 'Search using StackOverflow', 'ORA-600')

eval 'More Info' = url('stackoverflow', 'Search using StackOverflow', 'ORA-600')

凸状

https://www.cve.org/CVERecord?id=

指定されたCVE IDのリンクを生成します

* | link

| eval 'CVE Details' = url(cve, 'CVE-2021-22931 - Improper Null Termination in Node.js', 'CVE-2021-22931')

Generates a link to https://www.cve.org/CVERecord?id=CVE-2021-22931