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つの問合せを実行します。
サイズまたは期間タイプが単位のフィールドは、リンク分析チャート、追加フィールド・ヒストグラム、リンク表およびタイル・ビジュアライゼーションの値の書式設定に使用されます。
'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
出力例:
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を使用して検索するリンクを生成します |
|
飛ぶ | https://www.bing.com/search?q= Bingを使用して検索するリンクを生成します |
|
ddg カモノハシ |
https://duckduckgo.com/?q= DuckDuckGoを使用して検索するリンクを生成します |
|
まあまあです スタックオーバーフロー |
https://stackoverflow.com/search?q= StackOverflowで検索するリンクを生成します |
|
凸状 |
https://www.cve.org/CVERecord?id= 指定されたCVE IDのリンクを生成します |
|