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
コマンドで使用できるファンクションを示します。
カテゴリ | 例 |
---|---|
文字列ファンクション |
|
数値ファンクション |
|
日付ファンクション |
「比較のユーザーフレンドリな時間文字列」を参照してください。 |
条件ファンクション |
|
ハッシュ・ファンクション |
ノート: |
-
concat()
ファンクションでは、整数、浮動小数点数、長整数などの数値データ型を入力できます。数値フィールドは、対応する文字列値に自動的に変換されます。 -
||
を使用して、n個の入力を連結できます。ここでも、対応する文字列値に自動的に変換される数値データ型を入力できます。
パラメータ
次の表に、このコマンドで使用されるパラメータとその説明を示します。
パラメータ | 説明 |
---|---|
|
式の計算値を表示するフィールドの名前を指定します。 |
|
値を計算する必要がある式を指定します。 |
一般的なシナリオでこのコマンドを使用する例は、次を参照してください:
次に、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)
次の例は、フィールド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')
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
出力例:
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
は、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>®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と説明 | 例 |
---|---|---|
オラ 検索: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のリンクを生成します |
|