| Building Apache Flagon Docker Containers |
| =================================== |
| *Last Integration Test: 29 AUG 2019 using Docker Engine v19.03.1, Compose v1.24.1, Machine v0.16.1* |
| |
| Prerequisites |
| ------------- |
| |
| 1. Install [``Docker``](http://docker.com) on your machine. Requires Docker Compose 1.23 and above. |
| |
| 1. Install docker-compose. Full instructions can be found [``here``](https://docs.docker.com/compose/install/). |
| If you install Docker through the [``Desktop bundle``](https://www.docker.com/products/docker-desktop), docker-compose is included. |
| |
| Single Node Example Container |
| ----------------------------- |
| |
| The single node deployment steps below will build a single-node logging server on a single |
| machine. This is suitable for demonstrations and very limited data collections. Please |
| refer to our [``Kubernetes``](https://github.com/apache/incubator-flagon/tree/master/kubernetes) guide for deployments that scale to your needs. In some cases, |
| you may be able to use single node containers within scaling services (e.g., AWS EBS), but this |
| requires special configuration. Please reach out to us at [our dev list](mailto:dev@flagon.incubator.apache.org) for recommendations. |
| |
| 1. Create docker-machine instance. |
| **Note**: If using Docker Desktop bundle for OSX, there is a known bug in |
| the bundled version of virtualbox that will prevent a successful docker-machine creation. |
| Before installation, check that virtualbox version is at least 5.2. [``Reinstall virtualbox``](https://www.virtualbox.org/wiki/Downloads), if needed. |
| **Note**: If using Docker Desktop bundle for Windows 10, you will need to use ``Hyper-V`` instead of virtual box. Refer to [Docker's guide](https://docs.docker.com/machine/drivers/hyper-v/) on creating vms with Hyper-V. |
| ```bash |
| $ docker-machine create --virtualbox-memory 3072 --virtualbox-cpu-count 2 flagon |
| # Windows 10 users will need to use Hyper-V: |
| > docker-machine create -d hyperv --hyperv-virtual-switch "Primary Virtual Switch" --hyperv-memory 3072 --hyperv-cpu-count 2 flagon |
| ``` |
| |
| 1. Before launching the Docker containers, ensure your ``vm_max_map_count`` |
| kernel setting is set to at least 262144. |
| Visit [``Running Elasticsearch in Production mode``](https://www.elastic.co/guide/en/elasticsearch/reference/5.5/docker.html#docker-cli-run-prod-mode) for OS specific instructions. |
| |
| ```bash |
| # Example for Linux systems |
| $ docker-machine ssh flagon sudo sysctl -w vm.max_map_count=262144 |
| ``` |
| |
| 1. Create externel docker network to enable system monitoring. Only enable if running |
| Elasticsearch >6.5.4 configuration (single and cluster mode) |
| |
| ```bash |
| $ docker network create esnet |
| ``` |
| |
| 1. Start Elasticsearch 6.6.2 or 6.8.2 (Recommended) Give Elasticsearch about 1-2 minutes to start before confirming its state. |
| |
| ```bash |
| #start Elasticsearch v6.6.2 (Deprecated) |
| $ docker-compose -f docker-compose-6.6.2.yml up -d elasticsearch |
| |
| or |
| |
| #start Elasticsearch v6.8.2 (Recommended) |
| $ docker-compose up -d elasticsearch |
| ``` |
| |
| 1. Confirm state: |
| ```bash |
| # if Flagon vm is remote |
| $ docker-machine ssh flagon curl -XGET http://localhost:9200/_cluster/health?pretty |
| # if Flagon virtual machine is running on your local machine, no need for ssh, instead: |
| $ curl -XGET http://localhost:9200/_cluster/health?pretty |
| #output should look like this: |
| "cluster_name" : "Flagon", |
| "status" : "green", |
| "timed_out" : false, |
| "number_of_nodes" : 1, |
| "number_of_data_nodes" : 1, |
| "active_primary_shards" : 0, |
| "active_shards" : 0, |
| "relocating_shards" : 0, |
| "initializing_shards" : 0, |
| "unassigned_shards" : 0, |
| "delayed_unassigned_shards" : 0, |
| "number_of_pending_tasks" : 0, |
| "number_of_in_flight_fetch" : 0, |
| "task_max_waiting_in_queue_millis" : 0, |
| "active_shards_percent_as_number" : 100.0 |
| ``` |
| |
| 1. Launch logging server. Give Logstash about 2 minutes to start before confirming |
| its state. |
| |
| ```bash |
| $ docker-compose up -d logstash |
| # if Flagon vm is remote |
| $ docker-machine ssh flagon curl -XGET http://localhost:8100 |
| # if Flagon virtual machine is running on your local machine, no need for ssh, instead: |
| $ curl -XGET http://localhost:8100 |
| #ouput should look like this: |
| ok |
| ``` |
| |
| 1. Before Kibana can be used, we will need to generate some data. We provide an example instrumented website to assist. |
| |
| ```bash |
| $ docker-compose up -d site |
| # for remote users, forwards port to localhost |
| $ ssh docker@$(docker-machine ip flagon) -L 8080:localhost:8080 |
| ``` |
| |
| Visit `http://localhost:8080` and you will see Apache Flagon's home page. |
| |
| Note that the `userale` index uses dynamic mapping configurations for many fields. This means that if no valid data exists for |
| certain fields in the logs you collect at this step, Kibana won't know to map these fields to data types (e.g., string, text, |
| boolean, etc.). This can prevent certain dashboards and visualizations from appropriately displaying log aggregations. It is worth |
| 1-2 mins collecting some UserALE.js data in whichever way best emulates your use-case: from the same website, the [``UserALE.js example utilty``](https://github.com/apache/incubator-flagon-useralejs/tree/FLAGON-192/example), or the [``UserALE.js Web Extension``](https://github.com/apache/incubator-flagon-useralejs/tree/FLAGON-192/src/UserALEWebExtension). If you run into issues with data fields or visualizations, see the `Having Issues?` section below. |
| |
| 1. Launch Kibana. Give Kibana about 2-5 minutes to start before accessing |
| `http://localhost:5601`. |
| |
| ```bash |
| $ docker-compose up -d kibana |
| # for remote users, forwards port to localhost |
| $ ssh docker@$(docker-machine ip flagon) -L 5601:localhost:5601 |
| ``` |
| |
| 1. Register an index in Kibana to see the logs: |
| |
| Goto: Management -> Index Patterns and enter `userale` in the Index pattern box. |
| Choose `clientTime` in the drop down `Time Filter field name` field. Alternatively, to explore our "interval" logs, select `@timestamp`. |
| |
| ![alt text][configure_index] |
| |
| 1. Load example Dashboard and Visualizations under docker/kibana/. |
| |
| Goto: Management -> Saved Objects and select the `Import` button. Import the |
| `Apache Flagon Visualizations.json`, `Drill-Down Search.json`, `Apache Flagon Page Usage Dashboard.json`, and `Apache Flagon User Access Dashboard.json` files from the "Saved Objects" folder in the kibana directory. |
| |
| ![alt text][management] |
| |
| Set `userale` index if Kibana detects conflicts when you load visualizations and searches. |
| |
| ![alt text][viz_import] |
| |
| Once that is complete, navigate to the `Dashboard` view in Kibana and click the |
| `Apache Flagon Page Usage Dashboard` object. |
| |
| ![alt text][dashboard] |
| |
| 1. To see container health metrics, launch Metricbeat: |
| |
| ```bash |
| $ docker-compose up -d metricbeat |
| ``` |
| |
| Once the container is running, metricbeat dashboards will automatically load in Kibana. Navigate to the `Container Dashboard`. |
| |
| ![alt text][metrics] |
| |
| 1. To stop all containers. |
| ```bash |
| $ docker-compose stop |
| ``` |
| |
| 1. To kill the Flagon machine. |
| ```bash |
| $ docker-machine stop flagon |
| ``` |
| |
| 1. To remove the Flagon machine. |
| ```bash |
| $ docker-machine rm flagon |
| ``` |
| |
| If running on a single machine, on reboot or restart your Flagon machine is available, but |
| in a "stopped" state. You'll need to restart the machine, then you'll need to use docker- |
| compose up commands above to restart containers. |
| |
| 1. Restart the Flagon machine. |
| ```bash |
| $ docker-machine start flagon |
| $ docker-machine ls #confirm state |
| #output should look like this: |
| NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS |
| flagon - virtualbox Running tcp://192. ... v19.03.1 |
| ``` |
| |
| Having Issues? |
| -------------- |
| 1. Check out the docker-compose logs for the service(s) that are having issues. |
| |
| ```bash |
| $ docker-compose ps |
| ``` |
| |
| 1. If you find containers failing, you may have duplicate or dangling images! |
| |
| This can happen if you've played around with multiple machines and builds of the containers |
| on the same machine. Visit [``this excellent how to guide for removing images, containers, |
| and volumes``](https://www.digitalocean.com/community/tutorials/how-to-remove-docker-images-containers-and-volumes). Remove any duplicate images and rebuild the containers. |
| |
| 1. If you find that the `logstash` or `site` containers don't respond immediately, give them a few minutes. |
| In the case of the `site` container, you might try giving it a kick if its taking more than three minutes to load in browser" |
| |
| ```bash |
| #after loading container, confirming status is "up", and localhost:8080 still isn't loading, bring the container down |
| $ docker-compose kill site |
| |
| # then bring it back up, and see if it loads |
| $ docker-compose up -d site |
| ``` |
| |
| 1. If you find that Apache Flagon Kibana Dashboards aren't loading, or Apache UserALE.js log fields in Kibana's `Discover` view |
| appear with a warning icon, it could be that you didn't collect logs with valid data for those fields prior to loading the userale |
| index in Kibana. Don't worry, your data is fine--just navigate to the Management -> Index Patterns page, and click the "refresh" button in the upper right hand of the page (Disregard the "popularity metrics" warning). This will refresh the index, making those |
| fields aggregatable, and Dashboards should render properly. |
| |
| 1. Make sure to send us the docker-compose logs to help diagnose your issues please! |
| |
| ```bash |
| $ docker-compose logs > err.dump |
| ``` |
| |
| You can attach logs directly to tickets on our [``Apache Jira board``](https://issues.apache.org/jira/issues/?jql=project+%3D+FLAGON+AND+component+%3D+builds) |
| |
| 1. Still having issues? Reach out to us at at [our dev list](mailto:dev@flagon.incubator.apache.org). |
| |
| [configure_index]: ./docs/images/configure_index.png "Configure Kibana index" |
| [confirmation]: ./docs/images/confirmation.png "Confirm index pattern conflicts" |
| [dashboard]: ./docs/images/dashboard.png "Apache Flagon Page Usage Dashboard" |
| [management]: ./docs/images/management.png "Kibana management console" |
| [metrics]: ./docs/images/DockerBeats_Dashboard.png "Metricbeat Dashboard" |
| [viz_import]: ./docs/images/viz_import.png "Visualization Import Configuration" |
| |
| Licensing |
| -------------- |
| |
| Apache Flagon is provided under Apache License version 2.0. See LICENSE and NOTICE (at Master) file for more |
| details. |