Free tool
Grok and dissect pattern generator
Paste a few raw log lines. Get a dissect pattern when the delimiters allow it, a grok pattern when they do not, ECS field names, a per-line preview, and the ingest pipeline, _simulate request and Logstash filter to match.
Runs entirely in your browser. Nothing you enter is sent anywhere.
1. Log lines
Settings
2. Pattern
Dissect key modifiers (Elasticsearch dissect processor reference)
- %{field}
- Text up to the next delimiter. The last key takes the rest of the line when nothing follows it.
- %{field->}
- Right padding: skips repeated copies of the delimiter that follows, so one space or many both match.
- %{+field}
- Append: adds this value to an earlier key of the same name, joined by append_separator. Used here to rebuild timestamps that contain spaces.
- %{+field/2}
- Append with order: joins the parts in the numbered order instead of left to right.
- %{?name}
- Named skip: matches a value and drops it. Same as %{} but readable.
- %{}
- Empty key: matches and drops. %{->} also skips repeated delimiters.
- %{*key} %{&key}
- Reference keys: the first value becomes the field name, the second its value.
disabled, %{COMBINEDAPACHELOG} writes clientip, verb, request, response and bytes; with v1 it writes source.address, http.request.method, url.original, http.response.status_code and http.response.body.bytes. The ingest grok processor defaults to disabled on 8.x and 9.x. Logstash's grok filter takes its default from pipeline.ecs_compatibility, which is v8 from Logstash 8.0 on, so the Logstash block below states the setting explicitly. The patterns this page generates use only primitives that capture nothing themselves (IP, INT, WORD, HTTPDATE and so on), so the field names you set are the names you get under either setting. Type a composite pattern and the preview shows the names the chosen setting produces.
3. Fields
Names follow the Elastic Common Schema where the meaning is clear. Rename a field here and the pattern changes with it. Numbers get a convert processor; ECS keeps http.version and log.syslog.version as keyword, so they are not converted.
| Field | Skip | Convert to | Line 1 value |
|---|
4. Extraction preview
5. Output
Every example set on this page was run through POST _ingest/pipeline/_simulate on Elasticsearch 8.19.23 and 9.5.5 in our tests, in both modes where dissect applies: every line parsed, and the fields Elasticsearch extracted equalled this preview. The requests are the same on 8.x and 9.x. A pipeline that parses well can still run on a cluster that struggles: Run the full diagnostic.

