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コマンドと同様に、人間が読める文字列を使用して問合せの時間を操作できます。たとえば、「後で10mins」という名前の新しいフィールドを作成するには、「時間」フィールドの値より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つの問合せを実行します。

サイズまたは期間タイプの単位を持つフィールドは、リンク分析チャート、addfieldsヒストグラム、リンク表およびタイルのビジュアライゼーションの値をフォーマットするために使用されます:

'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ドル、数千米ドル、数百万ドルのUSドルまたは数十億ドルのUSドルが含まれます。

| 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 Currency
アフガニスタン AFN
アルバニア ALL
ALGERIA DZD
アメリカ YEN
アンゴラ AOA
アンティグアおよびバーブーダ XCD
ARGENTINA ARS
アルメニア AMD
アルバ AWG
AUSTRALIA AUD
AUSTRIA EUR
アゼルバイジャン AZN
バハマ BSD
BAHRAIN BHD
BANGLADESH BDT
バルバドス BBD
ベラルーシ BYN
BELGIUM EUR
ベリーズ BZD
バミューダ BMD
ボリビア BOB
BOSNIA AND HERZEGOVINA BAM
ボツワナ BWP
BRAZIL BRL
BULGARIA BGN
カンボジア KHR
カメルーン XAF
CANADA CAD
ケイマン諸島 KYD
CHILE CLP
CHINA CNY
コロンビア COP
コンゴ ブラザビル XAF
コンゴ(キンシャサ) CDF
COSTA RICA CRC
CROATIA HRK
キュラソー ANG
キプロス EUR
CZECH REPUBLIC CZK
DENMARK DKK
ジブチ DJF
ドメイン XCD
ドミニカ共和国 DOP
エクアドル YEN
EGYPT EGP
EL SALVADOR SVC
ESTONIA EUR
エチオピア ETB
FINLAND EUR
FRANCE EUR
FYR MACEDONIA MKD
ガボン XAF
ジョージア GEL
GERMANY EUR
ガーナ GHS
GREECE EUR
グレナダ XCD
GUATEMALA GTQ
ガイアナ GYD
ハワイ州 HTG
HONDURAS HNL
HONG KONG HKD
HUNGARY HUF
ICELAND ISK
INDIA INR
INDONESIA IDR
イラン IRR
イラク IQD
IRELAND EUR
ISRAEL ILS
ITALY EUR
象牙海岸 XOF
ジャマイカ JMD
JAPAN JPY
JORDAN JOD
KAZAKHSTAN KZT
KENYA KES
KOREA KRW
KUWAIT KWD
KYRGYZSTAN KGS
LAOS LAK
LATVIA EUR
LEBANON LBP
LIBYA LYD
リヒテンシュタイン CHF
リトアニア EUR
LUXEMBOURG EUR
マカオ MOP
マラウイ MWK
MALAYSIA MYR
モルジブ MVR
マルタ EUR
モーリタニア MRU
モーリシャス MUR
MEXICO MXN
モルドバ MDL
モンテネグロ EUR
MOROCCO MAD
モザンビーク MZN
ビルマ語 MMK
ナミビア NAD
ネパール NPR
NEW ZEALAND NZD
ニカラグア NIO
ナイジェリア NGN
NORWAY NOK
OMAN OMR
パキスタン PKR
パナマ PAB
パラグアイ PYG
ペルー ペン
PHILIPPINES PHP
POLAND PLN
PORTUGAL EUR
PUERTO RICO YEN
QATAR QAR
ROMANIA ロン
RUSSIA ラブ
セントクリストファーおよびネイビス XCD
セントルシア XCD
SAUDI ARABIA SAR
セネガル XOF
SERBIA RSD
シエラレオネ SLL
SINGAPORE SGD
SLOVAKIA EUR
SLOVENIA EUR
ソマリア SOS
SOUTH AFRICA ZAR
南スーダン SSP
SPAIN EUR
スリランカ LKR
スダン SDG
スリナム SRD
スワジランド SZL
SWEDEN SEK
SWITZERLAND CHF
SYRIA SYP
TAIWAN TWD
タンザニア TZS
THAILAND THB
THE NETHERLANDS EUR
トリニダードトバゴ TTD
TUNISIA TND
TURKEY TRY
トルコ TMT
UGANDA UGX
UKRAINE UAH
UNITED ARAB EMIRATES AED
UNITED KINGDOM GBP
ウルグアイ UYU
UZBEKISTAN UZS
VENEZUELA VES
VIETNAM VND
YEMEN YER
ザンビア 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')

Google https://www.google.com/search?q=

Googleで検索するためのリンクを生成

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

bing 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')

so

スタックオーバーフロー

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')

cve

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