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)

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

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

  • decode64(String)

    注意:文字列値がフィールドの場合、大/小文字が区別されるフィールドである必要があります。

  • encode64(String)

  • indexof (String, String [,int])

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

  • lastindexof(String, String, int)

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

  • 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 Laterという名前の新しいフィールドを作成するには、「時間」フィールドの値より10分進みます。

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

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

条件ファンクション

  • cidrmatch(String, String)

  • contains(String, String)

  • endsWith(String, String)

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

  • startsWith(String, String)

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

  • md5(<value to hash>)

  • sha1(<value to hash>)

  • sha256(<value to hash>)

  • sha512(<value to hash>)

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

三角関数

  • arccos(<number>)

    角度の円弧コサイン。

  • arcsin(<number>)

    角度のアークサイン。

  • arctan(<number>)

    角度のアークタンジェントを戻します。

  • atan2(<numbera>,<numberb>)

    直交座標aとbに対する、極座標上のラジアン単位の角度。

  • cos(<number>)

    角度の三角形の余弦。

  • e()

    数学定数eの値。

  • pi()

    piの値。

  • sin(<number>)

    角度の三角正弦(ラジアン単位)

  • tan(<number>)

    角度の接線。

  • toDegrees(<number>)

    ラジアンから度に変換します。

  • toRadians(<number>)

    度からラジアンに変換します。

パラメータ

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

パラメータ 説明

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 n =endsWith(uri, '.com')
*|eval n =startsWith(uri, 'http://oracle')
*|eval s = decode64(value)
*|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)
*|eval value = arccos(angle)
*|eval value = arcsin(angle)
*|eval value = arctan(angle)
*|eval value = atan2(x, y)
*|eval value = cos(angle)
*|eval value = e()
*|eval value = pi()
*|eval value = sin(angle)
*|eval value = tan(angle)
*|eval value =toDegrees(angle)
*|eval value =toRadians(angle)

次の例は、フィールド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')

次のコマンドは、入力値が数値の場合に、度数で指定される2組のラットロング座標間の距離(マイル)を計算します。

* | eval n = distance(lat1, long1, lat2, long2) 

次のコマンドでは、入力値が2つの文字列の場合に、2組の長い緯度座標間の距離(マイル単位)を計算します。

* | eval n = distance('lat1,long1', 'lat2,long2')

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ドル、数千米ドル、数百万米ドル、または数十億米ドルを含むものとしてマークします。

| 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関数でサポートされる通貨タイプ

この関数をevalコマンドに使用できるのは、linkコマンドの下のみです。一般的なシナリオでこの関数を使用する方法については、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
ボスニアヘルツェゴビナ 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
IRAQ IQD
IRELAND EUR
ISRAEL ILS
ITALY EUR
コートジボワール XOF
ジャマイカ JMD
JAPAN JPY
JORDAN JOD
KAZAKHSTAN KZT
ケニア KES
KOREA KRW
KUWAIT KWD
KYRGYZSTAN KGS
LAOS LAK
LATVIA EUR
レバノン 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
ニカラグア 新情報管理機関
ナイジェリア NGN
NORWAY NOK
オマーン OMR
パキスタン PKR
パナマ PAB
パラグアイ PYG
PERU ペン
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は、単一の関数で複数の置換をサポートします。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と説明

ora

検索: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')

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