AB>На данный момент возможности консольных утилит меня более чем устраивают. Что же касается приведенного примера с "языком запросов" — оно все прикольно ровно до определенного момента (пока логи имеют поля, пока требуется относительно тривиальные выборки и т.д.), дальше берем в руки awk/sed/grep-подобный скальпель и занимаемся художественным выпиливанием.
1. Поля настриваются в импортере логов. Даже если нет полей,
rex, после чего — все остальные запросы.
2. Про «тривиальные выборки» смешно, да. Я вот жду, может ты покажешь, как awk'ом и sed'ом я не знаю, персентили вытаскивать. Или outlier'ы на каких-то значениях.
AB>P.S. У данных продуктов есть своя ниша, где они будут "на своем месте", но для моих задач в большинстве случаев они не подходят.
Я вот тоже жду, может ты покажешь, как ты awk'ом парсишь 1.5 терабайта логов.
ЗЫ. «Тривиальная выборка», за пределами которой «awk/sed/grep-оподобный скальпель»
sourcetype=access_*
| transaction JSESSIONID clientip startswith="view" endswith="purchase"
| delta _time AS timeDelta p=1
| eval timeDelta=abs(timeDelta)
| eval timeDelta=tostring(timeDelta,"duration")
This example groups events into transactions if they have the same values of JSESSIONID and clientip. An event is defined as the beginning of the transaction if it contains the string "view," and the last event of the transaction if it contains the string "purchase".
The transactions are then piped into the delta command, which uses the _time field to calculate the time between one transaction and the transaction immediately preceding it. The search renames this change, in time, as timeDelta.
This example also uses the eval command to redefine timeDelta as its absolute value (abs(timeDelta)) and convert this value to a more readable string format with the tostring() function.

Еще одна тривиальная выборка
source=usgs
| eval Magnitude=case(
mag<=1, "0.0 - 1.0",
mag>1 AND mag<=2, "1.1 - 2.0",
mag>2 AND mag<=3, "2.1 - 3.0",
mag>3 AND mag<=4, "3.1 - 4.0",
mag>4 AND mag<=5, "4.1 - 5.0",
mag>5 AND mag<=6, "5.1 - 6.0",
mag>6 AND mag<=7, "6.1 - 7.0",
mag>7,"7.0+")
| eval Depth=case(
depth<=70, "Shallow",
depth>70 AND depth<=300, "Mid",
depth>300 AND depth<=700, "Deep")
| contingency Magnitude Depth
| sort Magnitude
Build a contingency table to look at the relationship between the magnitudes and depths of recent earthquakes. the search uses the eval command with the case() function to redefine the values of Magnitude and Depth, bucketing them into a range of values. For example, the Depth values are redefined as "Shallow", "Mid", or "Deep". This creates a more readable table:

ну и т.п.