The dataflow analytics and visualization platform
A data analytics platform that visualized events, dataflows (streams of events) and makes them observable.
It lets you search and analyse streams of events from logfiles (correlation-Ids, txn ids), Kafka or other sources. Analysis is both historical (batch) and live (stream) - providing insight on streams are behaving now and in the past. Historical analysis provides a baseline for measure performance, data characteristics and more. Perhaps an example is best.
A payment processing system.
Questions answered:
- Volume of transactions processed (rate/sec)
- Latency profiling at each stage of a pipeline? i.e. are some processing stages backing up?
- Percentile based breakdown and correlation of data attributes versus performance. i.e. Payment amount and Latency
- Heatmap overlay of live performance versus historical performance (broken down by hour-of-day, day-of-week etc)
Visual analysis:
Functional:
Applicability:
Fluidity is written to be CloudFirst and Serverless. The goal is to support large volume data storage using cloud storage (Amazon S3) and adhoc compute processing using serverless functions (AWS Lambda).
Data processing is expensive; this tool is meant to be cheap and simple. It provides
functionality that most people need.
$ clone
$ cd services
$ ./mvnw compile quarkus:dev
Open index.html in a browser from Intellij (backend.js defaults to http://localhost:8080 where quarkus is running the REST endpoint)
build and run the GraalVM executable.
Notes and limits:
Prerequisites:
> aws2 --stuff--
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"iam:*",
"apigateway:*",
"lambda:*",
"cloudformation:*",
"dynamodb:*"
],
"Resource": "*"
}
]
}
Reference: https://quarkus.io/guides/amazon-lambda-http
Notes: This approach uses the AWS Gateway Proxy (i.e. the Gateway passes through everything). Quarkus has a HTTP handler embedded in the Lambda the calls on the RX Rest endpoint locally.
Create the fluidity fat jar
$ mvn clean install
->
target/fluidity-0.1-SNAPSHOT-runner.jar
Package the deployment:
$ sam package --template-file sam.jvm.yaml --output-template-file packaged.yaml --s3-bucket <YOUR_S3_BUCKET>
Deploy it using any stack-name
$ sam deploy --template-file packaged.yaml --capabilities CAPABILITY_IAM --stack-name <YOUR_STACK_NAME>
The output will display the API-Gateway URL for the front end
List deployments looking for your stack (and others)
$ aws2 cloudformation list-stacks
to delete:
$ aws2 cloudformation delete-stack --stack-name <YOUR_STACK_NAME>
{ "StackSummaries": [
{
"StackId": "arn:aws:cloudformation:eu-west-2:001814218767:stack/fluidity-faas/6a5712b0-3d2f-11ea-8738-021679f87d94",
"StackName": "fluidity-faas",
"TemplateDescription": "AWS Serverless Quarkus HTTP - liquidlabs::fluidity",
"CreationTime": "2020-01-22T15:54:04.530000+00:00",
"LastUpdatedTime": "2020-01-22T15:54:09.927000+00:00",
"StackStatus": "CREATE_COMPLETE",
"DriftInformation": {
"StackDriftStatus": "NOT_CHECKED"
}
}
]
}
$ aws2 cloudformation describe-stacks --stack-name fluidity-faas
{
"Stacks": [
{
"StackId": "arn:aws:cloudformation:eu-west-2:001814218767:stack/fluidity-faas/6a5712b0-3d2f-11ea-8738-021679f87d94",
"StackName": "fluidity-faas",
"ChangeSetId": "arn:aws:cloudformation:eu-west-2:001814218767:changeSet/samcli-deploy1579708443/2f0ce821-122f-40b5-ad6f-26861bc64daf",
"Description": "Serverless log analysis- liquidlabs::fluidity",
"CreationTime": "2020-01-22T15:54:04.530000+00:00",
"LastUpdatedTime": "2020-01-22T15:54:09.927000+00:00",
"RollbackConfiguration": {},
"StackStatus": "CREATE_COMPLETE",
"DisableRollback": false,
"NotificationARNs": [],
"Capabilities": [
"CAPABILITY_IAM"
],
"Outputs": [
{
"OutputKey": "FluidityApi",
"OutputValue": "https://3dwlmgnks6.execute-api.eu-west-2.amazonaws.com/Prod/",
"Description": "URL for application",
"ExportName": "FluidityApi"
}
],
"Tags": [],
"EnableTerminationProtection": false,
"DriftInformation": {
"StackDriftStatus": "NOT_CHECKED"
}
}
]
}
https://3dwlmgnks6.execute-api.eu-west-2.amazonaws.com/Prod/
query/id
to the url. It will suffer a cold start, but subsequent invocations will be much quickerBrowser URL: https://3dwlmgnks6.execute-api.eu-west-2.amazonaws.com/Prod/query/id
Response: QueryResource