Quick Start

This is a collection of scripts and configuration that enables you to get up and running with Soluble in just a couple of minutes.

The expectation in this quickstart is that you are running this on your local machine using Docker. You can run all of the Soluble components on a linux server or in kubernetes, but doing that is beyond the scope of this quick-start guide.

Clone Quickstart Repository

Clone this repository onto your local machine so that you can run the scripts.

git clone https://github.com/soluble-ai/quickstart.git

Start Neo4j Database

All of the examples require that you have a functioning neo4j databse instance. To start neo4j, just run the folllowing:

./start-neo4j

Starting neo4j graph database...

edc9b67422f67bb00c76d4189424d8f1502d7de5d2f5f882589966fab9051e03
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                      NAMES
edc9b67422f6        neo4j:3.5           "/sbin/tini -g -- /d…"   2 seconds ago       Up 1 second         0.0.0.0:7473-7474->7473-7474/tcp, 0.0.0.0:7687->7687/tcp   neo4j

After a few seconds point your browser to:

http://localhost:7474

Log in with the following credentials:

username: neo4j
password: graph

After your container has started you should be able to follow the instructions and log in to the Neo4j web console.

Start Dashboard

The Soluble Dashboard and API server provides a UI for interacting with the data collected by the soluble containters.

To run it:

$ ./start-dashboard

RUNNING AS       : soluble
JAVA_VERSION     : 11.0.3
SOLUBLE_HOME     : /app
SOLUBLE_CONF_DIR : /app/conf
MAIN_JAR         : /app/bin/app.jar

2019-04-30 19:37:46,195 [main] [INFO] s.d.DynamicConfigurationListener - keystore (/app/conf/secrets/server-keystore.p12) not found...reverting to embedded keystore

              _         _      _              _              _      _                             _
  ___   ___  | | _   _ | |__  | |  ___     __| |  __ _  ___ | |__  | |__    ___    __ _  _ __  __| |
 / __| / _ \ | || | | || '_ \ | | / _ \   / _` | / _` |/ __|| '_ \ | '_ \  / _ \  / _` || '__|/ _` |
 \__ \| (_) || || |_| || |_) || ||  __/  | (_| || (_| |\__ \| | | || |_) || (_) || (_| || |  | (_| |
 |___/ \___/ |_| \__,_||_.__/ |_| \___|   \__,_| \__,_||___/|_| |_||_.__/  \___/  \__,_||_|   \__,_|
 
 ...

The dashboard will bind and listen on port 8443.

Point your browser to https://localhost.soluble.ai:8443

You can log in with the following credentials:

username: admin
password: admin

Note: The default installation will use a certificate issued by Let's Encrypt for localhost.soluble.ai which is a DNS A record for 127.0.0.1. This allows us to use HTTPS exclusively with valid certs. If you don't like this you can use https://localhost:8443 if you like, although you will get a cert warning, which is really no worse than a self-signed cert that is typical of initial installations.

Start Some Collectors

AWS

If you want to run the AWS collector, just run the following:

./start-aws-collector

RUNNING AS       : soluble
JAVA_VERSION     : 11.0.2
SOLUBLE_HOME     : /app
SOLUBLE_CONF_DIR : /app/conf
MAIN_JAR         : /app/bin/app.jar


              _         _      _
  ___   ___  | | _   _ | |__  | |  ___
 / __| / _ \ | || | | || '_ \ | | / _ \
 \__ \| (_) || || |_| || |_) || ||  __/
 |___/ \___/ |_| \__,_||_.__/ |_| \___|

 ...

It will begin scanning your AWS infrastruction and persisting a projection of that infrastructure in your Neo4j instance.

NOTE: For this to work, you need to have read-only credentials to your AWS account. This script will attempt to validate this.

Once the collector has scanned your AWS account, you can go to the Neo4j browser and look at the data that is there.

The following query will select the account(s) and all of the items directly connected to that account:

match 
    (a:AwsAccount)--(b)--(c) 
return 
    a,b,c;

If you want to see your EC2 instances and all the items directly connected to them:

match 
    (a:AwsEc2Instance)--(b) 
return 
    a,b

You will want to poke around with your data to explore the entities and relationships that are present.

Kubernetes

To scan a kubernetes cluster, make sure that you have read-only credentials to that cluster.

Typing kubectl get nodes should verify this.

Then run the following:

$ ./start-kubernetes-collector

RUNNING AS       : soluble
JAVA_VERSION     : 11.0.2
SOLUBLE_HOME     : /app
SOLUBLE_CONF_DIR : /app/conf
MAIN_JAR         : /app/bin/app.jar


              _         _      _
  ___   ___  | | _   _ | |__  | |  ___
 / __| / _ \ | || | | || '_ \ | | / _ \
 \__ \| (_) || || |_| || |_) || ||  __/
 |___/ \___/ |_| \__,_||_.__/ |_| \___|


...

The collector will run and begin scanning the kubernetes entities in your cluster.

Once that has been scanned you can go the Neo4j browswer and begin looking at the data. For instance, the following will show you all the the entities connected to your cluster, 2 levels deep.

match 
    (a:KubeCluster)--(b)--(c) 
return 
    a,b,c