How to read log json array format with filebeat

I have many log look like (json array)
This is raw log

[{"CreationTime":"2017-06-17T06:28:56","Id":"77bf08c6-5bb9-4333-a394-03f181d7250a","Operation":"UserLoggedIn","OrganizationId":"4ebc33361-871a-44c5-93a5-60eb590917cd","RecordType":15,"ResultStatus":"Succeeded","UserKey":"10037FFE9D6C9759@fpt.com.vn","UserType":0,"Version":1,"Workload":"AzureActiveDirectory","ClientIP":"116.96.81.65","ObjectId":"00000002-0000-0ff1-ce00-000000000000","UserId":"ManhNT16@company.com","AzureActiveDirectoryEventType":1,"ExtendedProperties":[{"Name":"UserAgent","Value":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"},{"Name":"UserAuthenticationMethod","Value":"65"},{"Name":"RequestType","Value":"WsFederation:wsfederation"},{"Name":"ResultStatusDetail","Value":"Success"}],"Actor":[{"ID":"f6a73d23-ddba-4333-9106-08efaee81e0e","Type":0},{"ID":"ManhNT16@company.com","Type":5},{"ID":"10037FFE9D6C9759","Type":3}],"ActorContextId":"4ebc9261-333a-44c5-93a5-60eb590917cd","ActorIpAddress":"116.96.81.65","InterSystemsId":"2948868c-6f8a-4b13-a44a-8011b254559d","IntraSystemId":"d5fef7d3-3337-45a2-b91b-b8f004ae1300","Target":[{"ID":"00000002-0000-0ff1-ce00-000000000000","Type":0}],"TargetContextId":"4ebc9261-871a-44c5-93a5-60eb590917cd","ApplicationId":"00000002-0000-0ff1-ce00-000000000000"}]

How to make filebeat read log above ? I know that filebeat does not start with [ and combines them with the previous line that does.
I add some config but it's not work. Filebeat can't read log file

multiline.pattern: '^['
multiline.negate: true
multiline.match: after

And here is friendly log

[
	{
		"CreationTime": "2017-06-17T06:28:56",
		"Id": "77bf08c6-5bb9-41d1-a394-03f181d7250a",
		"Operation": "UserLoggedIn",
		"OrganizationId": "4ebc9261-871a-44c5-93a5-60eb333317cd",
		"RecordType": 15,
		"ResultStatus": "Succeeded",
		"UserKey": "10037AAA9D6C9759@mycompany.com",
		"UserType": 0,
		"Version": 1,
		"Workload": "AzureActiveDirectory",
		"ClientIP": "116.96.81.65",
		"ObjectId": "00000002-1111-0ff1-ce00-000000000000",
		"UserId": "ManhNT16@mycompany.com",
		"AzureActiveDirectoryEventType": 1,
		"ExtendedProperties": [
			{
				"Name": "UserAgent",
				"Value": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
			},
			{
				"Name": "UserAuthenticationMethod",
				"Value": "65"
			},
			{
				"Name": "RequestType",
				"Value": "WsFederation:wsfederation"
			},
			{
				"Name": "ResultStatusDetail",
				"Value": "Success"
			}
		],
		"Actor": [
			{
				"ID": "f6a73d23-ddba-4552-9106-08efeee81e0e",
				"Type": 0
			},
			{
				"ID": "ManhNT16@mycompany.com",
				"Type": 5
			},
			{
				"ID": "10037AAA9D6C9759",
				"Type": 3
			}
		],
		"ActorContextId": "4ebc9261-871a-44c5-93a5-60eb333917cd",
		"ActorIpAddress": "116.96.81.65",
		"InterSystemsId": "2948868c-6f8a-4b13-a44a-8011b334559d",
		"IntraSystemId": "d5fef7d3-4417-45a2-b91b-b8f033ae1300",
		"Target": [
			{
				"ID": "00000002-0000-0ff1-ce00-000000000000",
				"Type": 0
			}
		],
		"TargetContextId": "4ebc9261-871a-44c5-93a5-60eb333917cd",
		"ApplicationId": "00000002-0000-0ff1-ce00-000000000000"
	}
]

Anyone help me? ... Thanks!

Can you share your full filebeat config? Make sure the multiline section is correctly put with the prospector.

Thanks @steffens, this is my filebeat config

filebeat.prospectors:
- input_type: log
  paths:
    - G:\log\Audit.AzureActiveDirectory
  document_type: azure
  multiline.pattern: '^\['
  multiline.negate: true
  multiline.match: after

- input_type: log
  paths:
    - G:\log\Audit.Exchange
  document_type: exchange
  multiline.pattern: '^\['
  multiline.negate: true
  multiline.match: after

- input_type: log
  paths:
    - G:\log\Audit.General
  document_type: general
  multiline.pattern: '^\['
  multiline.negate: true
  multiline.match: after

- input_type: log
  paths:
    - G:\log\Audit.SharePoint
  document_type: sharepoint
  multiline.pattern: '^\['
  multiline.negate: true
  multiline.match: after

#----------------------------- Logstash output --------------------------------
output.logstash:
  # The Logstash hosts
  hosts: ["10.1.6.22:5044", "10.1.6.23:5044"]
  worker: 2
  compression_level: 3
  loadbalance: true
  index: 'fb-fim-office'

I guess your log format looks like in this tester: https://play.golang.org/p/cP2qjYwYf7

The patterns looks ok. Are there multiple events in a log file? With multiple events, are they put into separate arrays, or all in the top-level array? Is the log pretty printed or not?

1 Like

Yes. have there are multiple event in log file

It is separate arrays.

No. It look like raw look above.

Thanks you!

Do you have a sample log (multiple events)? I have a hard time tell how logs look like and how processing could be done.

1 Like

Sorry, i checked my log, it have only one array in one file and have many file :slight_smile:

All in the top-level array. Like this. It have multiple events.

https://pastebin.com/raw/AXh80s3m

@steffens Can u help me solve my problem? Thanks !

I checked a hexdump of your logfile. The problem is not multiline. Actually you don't need multiline for this log file. I see some interesting things in your log file:

  1. No newline character at the end. The newline is required by filebeat to determine a log line is complete.
  2. Some wird binary sequence (non-printable characters?) At the end of your file (last 10 bytes)
  3. Not sure if I'm missing some fonts, but I can not correctly see some of the embedded strings with default UTF-8 encoding in my editor. Seems like windows path being included as is, in UTF-16 encoding. E.g. is this path correct? \\MuÌ£c Ä‘ã xoÌ (looks like some generated path to store some actual mail content in)?

I guess these files are written at once and never been touched afterwards?

Thank @steffens. I sent to you my answer via inbox messagage.

Not sure if I’m missing some fonts, but I can not correctly see some of the embedded strings with default UTF-8 encoding in my editor. Seems like windows path being included as is, in UTF-16 encoding. E.g. is this path correct? \MuÌ£c Ä‘ã xoÌ (looks like some generated path to store some actual mail content in)?

This path is correctly. It generate by O365. I dont know that why. Maybe Log )365 dont support my language.

I guess these files are written at once and never been touched afterwards?

Yeah, i dont touch anything.

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.