eval
evalコマンドを使用して、式の値を計算し、その値を新しいフィールドに表示します。
-
statsコマンドは既存のフィールドに基づいて統計を計算しますが、evalコマンドは、既存のフィールドと任意の式を使用して新規フィールドを作成します。 -
indexofやsubstrなどの文字列処理関数は、リソースを大量に消費します。このため、多数のログ・レコードに対してこれらの関数を使用してevalコマンドを実行するか、フィールド値を大きくすることはお薦めしません。かわりに、ログ・ソースの拡張フィールド定義(EFD)またはラベルを使用してこれらの値を抽出します。ソースでの拡張フィールドの使用およびソースでのラベルの使用を参照してください。 -
evalコマンドで使用されるフィールド名に文字[および]が含まれていないことを確認します。
構文
*|eval <new_field_name>=<expression>コマンドで使用可能な演算子およびファンクション:
次の表に、evalコマンドで使用できる演算子を示します。
| カテゴリ | 例 |
|---|---|
|
算術演算子 |
+, -, *, /, % |
|
比較演算子 |
=, !=, <, >, <=, >= |
|
論理演算子 |
and, or, not |
|
条件演算子 |
if(<expression>,<expression>,<expression>) |
|
複数比較演算子 |
in, not in |
次の表に、evalコマンドで使用できるファンクションを示します。
| カテゴリ | 例 |
|---|---|
|
文字列ファンクション |
|
|
数値ファンクション |
|
|
日付ファンクション |
比較におけるユーザーフレンドリな時間文字列を参照してください。 |
|
条件ファンクション |
|
|
ハッシュ・ファンクション |
ノート: 現在、 |
|
三角関数 |
|
パラメータ
次の表に、このコマンドで使用されるパラメータとその説明を示します。
| パラメータ | 説明 |
|---|---|
|
|
式の計算値を表示するフィールドの名前を指定します。 |
|
|
値を計算する必要がある式を指定します。 |
一般的なシナリオでこのコマンドを使用する例は、次を参照してください:
次に、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)次の例は、フィールドdateをStart 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 TimeとStart 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- データ・サイズ:
BYTEKILOBYTE | KBMEGABYTE | MBGIGABYTE | GBTERABYTE | TBPETABYTE | PBEXABYTE | EB
- 時間:
MILLISECOND | MSS | SEC | SECS | SECOND | SECONDSM | MIN | MINS | MINUTE | MINUTESH | HR | HRS | HOUR | HOURSD | DAY | DAYSW | WEEK | WEEKSMON | MONTH | MONTHSY | YR | YRS | YEAR | YEARSMICRO | µs
- 指数:
WATTKILOWATT | kWMEGAWATT | MWGIGAWATT | GWTERAWATT | TWPETAWATT | PWEXAWATT | EW
- 温度:
KELVIN | KCELSIUS | CFAHRENHEIT | F
- 頻度:
HERTZ | HzKILOHERTZ | kHzMEGAHERTZ | MHzGIGAHERTZ | GHzTERAHERTZ | THzPETAHERTZ | PHzEXAHERTZ | 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出力例:

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出力例:

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>®ion=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で終わります。
次の例では、newFieldはaabbccのサブ文字列で、開始索引(包含)は2、終了索引(除外)は4です。文字列の場合、索引数は0で始まることに注意してください。したがって、結果の部分文字列はbbです。
*|eval newField = substr('aabbcc', 2, 4)substr関数が使用されるユースケースについては、indexof関数の詳細およびlastindexof関数の詳細を参照してください。
urlファンクションの詳細
urlファンクションの構文:
url(String, Name, Parameter)NameとParameterの値はオプションです。
- 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指定した文字列のすべての |
|
|
技術 オラクル・テクノロジー |
https://community.oracle.com/tech/search?query=Oracleテクノロジ・フォーラムを検索するためのリンクの生成 |
|
|
モスク オラクルのモスクワ |
https://community.oracle.com/mosc/search?query=My Oracle Supportフォーラムを検索するためのリンクを生成します。 |
|
| グーグル | https://www.google.com/search?q=Googleを使用して検索するリンクを生成 |
|
| bing | https://www.bing.com/search?q=Bingを使用した検索へのリンクの生成 |
|
|
ddg カモノハシ |
https://duckduckgo.com/?q=DuckDuckGoを使用して検索するリンクを生成します |
|
|
so スタックオーバーフロー |
https://stackoverflow.com/search?q=StackOverflowで検索するリンクを生成します。 |
|
|
CVE |
https://www.cve.org/CVERecord?id=指定されたCVE IDのリンクを生成します |
|