{"id":19315168,"url":"https://github.com/apache/fluo-muchos","last_synced_at":"2025-05-08T00:26:02.531Z","repository":{"id":26145380,"uuid":"29590486","full_name":"apache/fluo-muchos","owner":"apache","description":"Apache Fluo Muchos","archived":false,"fork":false,"pushed_at":"2024-12-06T02:43:08.000Z","size":1110,"stargazers_count":26,"open_issues_count":27,"forks_count":36,"subscribers_count":16,"default_branch":"main","last_synced_at":"2025-05-03T09:17:46.349Z","etag":null,"topics":["accumulo","ansible","aws","azure","big-data","fluo","hacktoberfest"],"latest_commit_sha":null,"homepage":"https://fluo.apache.org","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/apache.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2015-01-21T13:23:09.000Z","updated_at":"2024-12-06T02:43:12.000Z","dependencies_parsed_at":"2024-01-25T23:06:43.263Z","dependency_job_id":"326a2ee4-50d8-4df5-95e2-fed12231ace5","html_url":"https://github.com/apache/fluo-muchos","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Ffluo-muchos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Ffluo-muchos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Ffluo-muchos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Ffluo-muchos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/apache","download_url":"https://codeload.github.com/apache/fluo-muchos/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252975110,"owners_count":21834383,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["accumulo","ansible","aws","azure","big-data","fluo","hacktoberfest"],"created_at":"2024-11-10T01:04:47.023Z","updated_at":"2025-05-08T00:26:02.507Z","avatar_url":"https://github.com/apache.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Muchos][logo]\n---\n[![Build Status][ci]][ga] [![Apache License][li]][ll]\n\n**Muchos automates setting up [Apache Accumulo][accumulo] or [Apache Fluo][fluo] (and their dependencies) on a cluster**\n\nMuchos makes it easy to launch a cluster in Amazon's EC2 or Microsoft Azure and deploy Accumulo or Fluo to it. Muchos\nenables developers to experiment with Accumulo or Fluo in a realistic, distributed environment.\nMuchos installs all software using tarball distributions which makes its easy to experiment\nwith the latest versions of Accumulo, Hadoop, Zookeeper, etc without waiting for downstream packaging.\n\nMuchos is not recommended at this time for production environments as it has no support for updating\nand upgrading dependencies. It also has a wipe command that is great for testing but dangerous for\nproduction environments.\n\nMuchos is structured into two high level components:\n\n * [Ansible] scripts that install and configure Fluo and its dependencies on a cluster.\n * Python scripts that push the Ansible scripts from a local development machine to a cluster and\n   run them. These Python scripts can also optionally launch a cluster in EC2 using [boto] or in Azure using Azure CLI.\n\nCheck out [Uno] for setting up Accumulo or Fluo on a single machine.\n\n## Requirements\n\n### Common\n\nMuchos requires the following common components for installation and setup:\n\n* Python 3 with a virtual environment setup.\nCreate a Python 3 environment and switch to it. (The CI tests using Python 3.11,\nbut this should work in later versions as well. If you encounter problems,\nplease file an issue).\n```bash\ncd ~\npython3.11 -m venv env\nsource env/bin/activate\n```\n* `ssh-agent` installed and running and ssh-agent forwarding.  Note that this may\nalso require the creation of SSH public-private [key pair](https://help.github.com/en/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent).\n```bash\neval $(ssh-agent -s)\nssh-add ~/.ssh/id_rsa\n```\n* Git (current version).\n* Install required Python libraries by executing `pip install -r lib/requirements.txt` command.\n* Install common Ansible collections by executing the [install-ansible-collections](scripts/install-ansible-collections) script.\n\n### EC2\n\nMuchos requires the following for EC2 installations:\n\n* [awscli] (version 2) \u0026 [boto3] libraries - Install using `pip3 install awscli2 boto3 --upgrade`\n* Note: if using Ubuntu you may need to install botocore separately using `pip3 install awscli boto3 botocore`\n* An AWS account with your SSH public key uploaded. When you configure [muchos.props], set `key.name`\n  to name of your key pair in AWS.\n* `~/.aws` [configured][aws-config] on your machine. Can be created manually or using [aws configure][awscli-config].\n\n### Azure\n\nMuchos requires the following for Azure installations:\n\n* [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest) must be installed,\n  configured and authenticated to an Azure subscription. It is recommended to use Azure CLI 2.50 or later.\n* An Azure account with permissions to either use an existing or create new Resource Groups, Virtual Networks and Subnets\n* A machine which can connect to securely deploy the cluster in Azure.\n* Install the [Ansible collection for Azure](https://github.com/ansible-collections/azure), and associated pre-requisites within\n  the Python virtual environment, by executing the [install-ansible-for-azure](scripts/install-ansible-for-azure) script.\n\nWhen running Muchos under Ubuntu 18.04, checkout these [tips](docs/azure-ubuntu-1804.md).\n\n## Quickstart\n\nThe following commands will install Muchos, launch a cluster, and setup/run Accumulo:\n\n```sh\ngit clone https://github.com/apache/fluo-muchos.git\n\ncd fluo-muchos/\ncp conf/muchos.props.example conf/muchos.props\nvim conf/muchos.props                                   # Edit to configure Muchos cluster\n./bin/muchos launch -c mycluster                        # Launches Muchos cluster in EC2 or Azure\n./bin/muchos setup                                      # Set up cluster and start Accumulo\n```\n\nThe `launch` command will create a cluster with the name specified in the command (e.g. 'mycluster'). The `setup`\ncommand can be run repeatedly to fix any failures and will not repeat successful operations.\n\nAfter your cluster is launched, SSH to it using the following command:\n\n```sh\n./bin/muchos ssh\n```\n\nRun the following command to terminate your cluster. WARNING: All cluster data will be lost.\n\n```sh\n./bin/muchos terminate\n```\n\nPlease continue reading for more detailed Muchos instructions.\n\n## Launching an EC2 cluster\n\nBefore launching a cluster, you will need to complete the requirements above, clone the Muchos repo, and\ncreate [muchos.props]. If you want to give others access to your cluster, add\ntheir public keys to a file named `keys` in your `conf/` directory.  During the setup of your\ncluster, this file will be appended on each node to the `~/.ssh/authorized_keys` file for the user\nset by the `cluster.username` property.\n\n### Configuring the AMI\n\nYou might also need to configure the `aws_ami` property in [muchos.props]. Muchos by default uses a Fedora 35 image for EC2. By default, the `aws_ami` property is set to this Fedora 35 AMI in `us-east-1`. You will need to change this value if a newer image has been released or if you are running in different region than `us-east-1`.\n\n### Launching the cluster\n\nAfter following the steps above, run the following command to launch an EC2 cluster called `mycluster`:\n\n    ./bin/muchos launch -c mycluster\n\nAfter your cluster has launched, you do not have to specify a cluster anymore using `-c` (unless you\nhave multiple clusters running).\n\nRun the following command to confirm that you can ssh to the leader node:\n\n    ./bin/muchos ssh\n\nYou can check the status of the nodes using the EC2 Dashboard or by running the following command:\n\n    ./bin/muchos status\n\n## Launching an Azure cluster\n\nBefore launching a cluster, you will need to complete the requirements for Azure above, clone the Muchos repo, and\ncreate your `conf/muchos.props` file by making a copy of the [muchos.props] example. If you want to give others access to your\ncluster, add their public keys to a file named `keys` in your `conf/` directory.  During the setup of your cluster,\nthis file will be appended on each node to the `~/.ssh/authorized_keys` file for the user set by the\n`cluster.username` property.  You will also need to ensure you have authenticated to Azure and set the target\nsubscription using the [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/manage-azure-subscriptions-azure-cli?view=azure-cli-latest).\n\nMuchos by default uses an AlmaLinux 9 image that is hosted in the Azure marketplace. The Azure Linux Agent is already\npre-installed on the Azure Marketplace images and is typically available from the distribution's package repository.\n\nEdit the values in the sections within [muchos.props] as below\nUnder the `general` section, edit following values as per your configuration\n* `cluster_type = azure`\n* `cluster_user` should be set to the name of the administrative user\n* `proxy_hostname` (optional) is the name of the machine which has access to the cluster VNET\n\nUnder the `azure` section, edit following values as per your configuration:\n* `azure_subscription_id` to provide the Azure subscription GUID\n* `resource_group` to provide the resource-group name for the cluster deployment. A new resource group with\n  this name will be created if it doesn't already exist\n* `vnet` to provide the name of the VNET that your cluster nodes should use. A new VNET with this name will be\n  created if it doesn't already exist\n* `subnet` to provide a name for the subnet within which the cluster resources will be deployed\n* `use_multiple_vmss` allows you to configure VMs with different CPU, memory, disk configurations for leaders and workers. To\n  know more about this feature, please follow the [doc](docs/azure-multiple-vmss.md).\n* `azure_image_reference` allows you to specify the Azure image SKU in the format as shown below.\n  ```bash\n  offer|publisher|sku|version|image_id|\n  Ex: almalinux-x86_64|almalinux|9-gen2|latest||\n  ```\n  For more information on using other images, refer to [Azure images](docs/azure-image-reference.md).\n* `azure_proxy_image_reference` allows you to specify the Azure image SKU that will be used for the optional proxy machine.\n  If this property is not specified, then the value of `azure_image_reference` will be used instead.\n* `numnodes` to change the cluster size in terms of number of nodes deployed\n* `data_disk_count` to specify how many persistent data disks are attached to each node and will be used by HDFS.\n   If you would prefer to use ephemeral / storage for Azure clusters, please follow [these steps](docs/azure-ephemeral-disks.md).\n* `vm_sku` to specify the VM size to use. You can choose from the\n  [available VM sizes](https://docs.microsoft.com/en-us/azure/virtual-machines/linux/sizes-general).\n* `use_adlsg2` to use Azure Data Lake Storage(ADLS) Gen2 as datastore for Accumulo\n  [ADLS Gen2 Doc](https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-introduction).\n  [Setup ADLS Gen2 as datastore for Accumulo](https://accumulo.apache.org/blog/2019/10/15/accumulo-adlsgen2-notes.html).\n* `az_oms_integration_needed` to implement Log Analytics workspace, Dashboard \u0026 Azure Monitor Workbooks\n  [Create Log Analytics workspace](https://docs.microsoft.com/en-us/azure/azure-monitor/learn/quick-create-workspace).\n  [Create and Share dashboards](https://docs.microsoft.com/en-us/azure/azure-portal/azure-portal-dashboards).\n  [Azure Monitor Workbooks](https://docs.microsoft.com/en-us/azure/azure-monitor/platform/workbooks-overview).\n* `az_use_app_insights` to configure an Azure Application Insights with your setup, and activate the application insights\n  [Java agent](https://docs.microsoft.com/en-us/azure/azure-monitor/app/java-in-process-agent) with the manager and tablet\n  servers. Customize [applicationinsights.json](./ansible/roles/common/tasks/templates/applicationinsights.json) to meet\n  your needs before executing muchos setup.\n\nPlease refer to the [muchos.props] example for the full list of Azure-specific configurations - some of which have supplementary comments.\n\nWithin Azure the `nodes` section is auto populated with the hostnames and their default roles.\n\nAfter following the steps above, run the following command to launch an Azure VMSS cluster called `mycluster`\n(where 'mycluster' is the name assigned to your cluster):\n```bash\n.bin/muchos launch -c `mycluster` # Launches Muchos cluster in Azure\n```\n\n## Set up the cluster\n\nOnce your cluster is built in EC2 or Azure, the `./bin/muchos setup` command will set up your cluster and\nstart Hadoop, Zookeeper \u0026 Accumulo.  It will download release tarballs of Fluo, Accumulo, Hadoop, etc. The\nversions of these tarballs are specified in [muchos.props] and can be changed if desired.\n\nOptionally, Muchos can setup the cluster using an Accumulo or Fluo tarball that is placed in the\n`conf/upload` directory of Muchos. This option is only necessary if you want to use an unreleased\nversion of Fluo or Accumulo. Before running the `muchos setup` command, you should confirm that the\nhash (typically SHA-512 or SHA-256) of your tarball matches what is set in [conf/checksums][checksums].\nRun the command `shasum -a 512 /path/to/tarball` on your tarball to determine its hash.\nThe entry in [conf/checksums][checksums] can optionally include the algorithm as a prefix. If the algorithm\nis not specified then Muchos will infer the algorithm based on the length of the hash. Currently Muchos\nsupports using sha512 / sha384 / sha256 / sha224 / sha1 / md5 hashes for the checksum.\n\nThe `muchos setup` command will install and start Accumulo, Hadoop, and Zookeeper.  The optional\nservices below will only be set up if configured in the `[nodes]` section of [muchos.props]:\n\n1. `fluo` - Fluo only needs to be installed and configured on a single node in your cluster as Fluo\napplications are run in YARN.  If set as a service, `muchos setup` will install and partially\nconfigure Fluo but not start it.  To finish setup, follow the steps in the 'Run a Fluo application'\nsection below.\n\n2. `metrics` - The Metrics service installs and configures collectd, InfluxDB and Grafana.  Cluster\nmetrics are sent to InfluxDB using collectd and are viewable in Grafana.  If Fluo is running, its\nmetrics will also be viewable in Grafana.\n\n3. `spark` - If specified on a node, Apache Spark will be installed on all nodes and the Spark History\nserver will be run on this node.\n\n4. `mesosmaster` - If specified, a Mesos master will be started on this node and Mesos slaves will\nbe started on all workers nodes. The Mesos status page will be viewable at\n`http://\u003cMESOS_MASTER_NODE\u003e:5050/`. Marathon will also be started on this node and will be viewable\nat `http://\u003cMESOS_MASTER_NODE\u003e:8080/`.\n\n5. `client` - Used to specify a client node where no services are run but libraries are installed to\nrun Accumulo/Hadoop clients.\n\n6. `swarmmanager` - Sets up [Docker swarm] with the manager on this node and joins all worker nodes\nto this swarm. When this is set, docker will be installed on all nodes of the cluster. It is\nrecommended that the swarm manager is specified on a worker node as it runs docker containers. Check\nout [Portainer] if you want to run a management UI for your swarm cluster.\n\n7. `elkserver` - Sets up the Elasticsearch, Logstash, and Kibana stack. This allows logging data to be search, analyzed, and visualized in real time.\n\nIf you run the `muchos setup` command and a failure occurs, you can repeat the command until setup\ncompletes. Any work that was successfully completed will not be repeated. While some setup steps can\ntake over a minute, use `ctrl-c` to stop setup if it hangs for a long time. Just remember to run\n`muchos setup` again to finish setup.\n\n## Manage the cluster\n\nThe `setup` command is idempotent. It can be run again on a working cluster. It will not change the\ncluster if everything is configured and running correctly. If a process has stopped, the `setup`\ncommand will restart the process.\n\nThe `./bin/muchos wipe` command can be used to wipe all data from the cluster and kill any running\nprocesses. After running the `wipe` command, run the `setup` command to start a fresh cluster.\n\nIf you set `proxy_socks_port` in your [muchos.props], a SOCKS proxy will be created on that port\nwhen you use `muchos ssh` to connect to your cluster. If you add a proxy management tool to your\nbrowser and whitelist `http://leader*`, `http://worker*` and `http://metrics*` to redirect traffic\nto your proxy, you can view the monitoring \u0026 status pages below in your browser. Please note - The\nhosts in the URLs below match the configuration in [nodes] of `muchos.prop.example` and may be\ndifferent for your cluster.\n\n * NameNode status - [http://leader1:9870/](http://leader1:9870/)\n * ResourceManger status - [http://leader2:8088/cluster](http://leader2:8088/cluster)\n * Accumulo monitor - [http://leader3:9995/](http://leader3:9995/)\n * Spark History Server - [http://leader2:18080/](http://leader2:18080/)\n * Grafana Metrics and Monitoring - [http://metrics:3000/](http://metrics:3000/)\n * Mesos status - [http://leader1:5050/](http://leader1:5050/) (if `mesosmaster` configured on leader1)\n * Marathon status - [http://leader1:8080/](http://leader1:8080/) (if `mesosmaster` configured on leader1)\n * Kibana status - [http://leader1:5601/](http://leader1:5601) (But Kibana is configured on all nodes)\n\n## Run a Fluo application\n\nRunning an example Fluo application like [WebIndex], [Phrasecount], or [Stresso] is easy\nwith Muchos as it configures your shell with common environment variables. To run an example\napplication, SSH to a node on cluster where Fluo is installed and clone the example repo:\n\n```sh\n./bin/muchos ssh                      # SSH to cluster proxy node\nssh \u003cnode where Fluo is installed\u003e    # Nodes with Fluo installed is determined by Muchos config\nhub clone apache/fluo-examples        # Clone repo of Fluo example applications. Press enter for user/password.\n```\n\nStart the example application using its provided scripts.  To show how simple this can be, commands\nto run the [WebIndex] application are shown below.  Read the [WebIndex] README to learn more\nbefore running these commands.\n\n```sh\ncd fluo-examples/webindex\n./bin/webindex init                   # Initialize and start webindex Fluo application\n./bin/webindex getpaths 2015-18       # Retrieves CommonCrawl paths file for 2015-18 crawl\n./bin/webindex load-s3 2015-18 0-9    # Load 10 files into Fluo in the 0-9 range of 2015-18 crawl\n./bin/webindex ui                     # Runs the WebIndex UI\n```\n\nIf you have your own application to run, you can follow the [Fluo application](fluo-app)\ninstructions to configure, initialize, and start your application. To automate these steps, you can\nmimic the scripts of example Fluo applications above.\n\n## Customize your cluster\n\nAfter `./bin/muchos setup` is run, users can install additional software on the cluster using their own\nAnsible playbooks. In their own playbooks, users can reference any configuration in the Ansible\ninventory file at `/etc/ansible/hosts` which is set up by Muchos on the proxy node. The inventory\nfile lists the hosts for services on the cluster such as the Zookeeper nodes, Namenode, Accumulo\nmaster, etc. It also has variables in the `[all:vars]` section that contain settings that may be\nuseful in user playbooks. It is recommended that any user-defined Ansible playbooks should be\nmanaged in their own git repository (see [mikewalch/muchos-custom][mc] for an example).\n\n## High-Availability (optional)\n\nAdditionally, Muchos can be configured to provide High-Availability for HDFS \u0026 Accumulo components. By default,\nthis feature is off, however it can be turned on by editing the following settings in [muchos.props]\nunder the `general` section as shown below:\n\n```ini\nhdfs_ha = True                        # default is False\nnameservice_id = muchoshacluster      # Logical name for the cluster, no special characters\n```\n\nBefore enabling HA, it is strongly recommended you read the Apache doc for [HDFS HA] \u0026 [Accumulo HA]\n\nAlso in the `[nodes]` section of [muchos.props] ensure the `journalnode` and `zkfc` service are configured to run.\n\nWhen `hdfs_ha` is `True` it also enables the ability to have HA resource managers for YARN.  To utilize this feature, specify `resourcemanager` for multiple leader nodes in the `[nodes]` section.\n\n## Terminating your cluster\n\nIf you launched your cluster, run the following command to terminate your cluster. WARNING - All\ndata on your cluster will be lost:\n\n    ./bin/muchos terminate\n\n## Automatic shutdown of clusters\n\nWith the default configuration, clusters will not shutdown automatically after a delay and the default\nshutdown behavior will be stopping the node.  If you would like your cluster to terminate after 8 hours,\nset the following configuration in [muchos.props]:\n\n```ini\nshutdown_delay_minutes = 480\nshutdown_behavior = terminate\n```\n\nIf you decide later to cancel the shutdown, run `muchos cancel_shutdown`.\n\n## Retrieving cluster configuration\n\nThe `config` command allows you to retrieve cluster configuration for your own scripts:\n\n```sh\n$ ./bin/muchos config -p leader.public.ip\n10.10.10.10\n```\n\n## Contributions\n\nWe welcome contributions to the project. [These notes](./CONTRIBUTING.md) should be helpful.\n\n## Powered by\n\nMuchos is powered by the following projects:\n\n * [boto] - Python library used by `muchos launch` to start a cluster in AWS EC2.\n * [ansible] - Cluster management tool that is used by `muchos setup` to install, configure, and\n   start Fluo, Accumulo, Hadoop, etc on an existing EC2 or bare metal cluster.\n * [azure-cli] - The Azure CLI is a command-line tool for managing Azure resources.\n * [ansible-azure] - Ansible includes a suite of modules for interacting with Azure Resource Manager.\n\n[aws-config]: http://docs.aws.amazon.com/cli/latest/userguide/cli-config-files.html\n[awscli]: https://docs.aws.amazon.com/cli/latest/userguide/installing.html\n[awscli-config]: http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#cli-quick-configuration\n[azure-cli]: https://docs.microsoft.com/en-us/cli/azure/?view=azure-cli-latest\n[ansible-azure]: https://docs.ansible.com/ansible/latest/scenario_guides/guide_azure.html\n[fluo-app]: https://github.com/apache/fluo/blob/main/docs/applications.md\n[WebIndex]: https://github.com/apache/fluo-examples/tree/main/webindex\n[Phrasecount]: https://github.com/apache/fluo-examples/tree/main/phrasecount\n[Stresso]: https://github.com/apache/fluo-examples/tree/main/stresso\n[boto]: http://boto.cloudhackers.com/en/latest/\n[boto3]: https://github.com/boto/boto3\n[Ansible]: https://www.ansible.com/\n[ci]: https://github.com/apache/fluo-muchos/workflows/CI/badge.svg\n[ga]: https://github.com/apache/fluo-muchos/actions\n[li]: http://img.shields.io/badge/license-ASL-blue.svg\n[ll]: https://github.com/apache/fluo-muchos/blob/main/LICENSE\n[logo]: contrib/muchos-logo.png\n[mc]: https://github.com/mikewalch/muchos-custom\n[fluo]: http://fluo.apache.org/\n[accumulo]: http://accumulo.apache.org/\n[zookeeper]: http://zookeeper.apache.org/\n[hadoop]: http://hadoop.apache.org/\n[Uno]: https://github.com/apache/fluo-uno\n[muchos.props]: conf/muchos.props.example\n[Docker swarm]: https://docs.docker.com/engine/swarm/\n[Portainer]: https://github.com/portainer/portainer\n[checksums]: conf/checksums\n[HDFS HA]: https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html\n[Accumulo HA]: https://accumulo.apache.org/1.9/accumulo_user_manual.html#_components\n[ELK Stack]: https://www.elastic.co/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapache%2Ffluo-muchos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fapache%2Ffluo-muchos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapache%2Ffluo-muchos/lists"}