{"id":13578010,"url":"https://github.com/johnsusek/praeco","last_synced_at":"2025-04-11T22:29:52.761Z","repository":{"id":38401498,"uuid":"148820496","full_name":"johnsusek/praeco","owner":"johnsusek","description":"Elasticsearch alerting made simple.","archived":false,"fork":false,"pushed_at":"2025-03-31T16:55:05.000Z","size":13884,"stargazers_count":557,"open_issues_count":77,"forks_count":90,"subscribers_count":20,"default_branch":"master","last_synced_at":"2025-04-03T14:51:48.526Z","etag":null,"topics":["alerting","elastalert","elasticsearch","logstash"],"latest_commit_sha":null,"homepage":"","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/johnsusek.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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}},"created_at":"2018-09-14T17:22:14.000Z","updated_at":"2025-03-31T16:38:58.000Z","dependencies_parsed_at":"2024-01-14T12:43:34.341Z","dependency_job_id":"b6e5547d-d490-4f7b-9a80-f2846636c7fe","html_url":"https://github.com/johnsusek/praeco","commit_stats":null,"previous_names":["servercentral/praeco"],"tags_count":60,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnsusek%2Fpraeco","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnsusek%2Fpraeco/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnsusek%2Fpraeco/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnsusek%2Fpraeco/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/johnsusek","download_url":"https://codeload.github.com/johnsusek/praeco/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248489319,"owners_count":21112546,"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":["alerting","elastalert","elasticsearch","logstash"],"created_at":"2024-08-01T15:01:26.281Z","updated_at":"2025-04-11T22:29:52.732Z","avatar_url":"https://github.com/johnsusek.png","language":"Vue","funding_links":[],"categories":["Vue"],"sub_categories":[],"readme":"# Praeco\n\n![GitHub release](https://img.shields.io/github/release/johnsusek/praeco.svg)\n![Docker Pulls](https://img.shields.io/docker/pulls/praecoapp/praeco.svg)\n![GitHub stars](https://img.shields.io/github/stars/johnsusek/praeco.svg?style=social\u0026label=Stars)\n\n\u003cimg align=\"left\" src=\"https://user-images.githubusercontent.com/611996/52907999-50fca900-3232-11e9-8aee-40f7dc37ec65.jpg\"\u003e\n\n**Praeco** is an alerting tool for Elasticsearch – a GUI for [ElastAlert 2](https://github.com/jertel/elastalert2), using the [ElastAlert API](https://github.com/johnsusek/elastalert-server).\n\n- Interactively build alerts for your Elasticsearch data using a query builder\n- Preview results in an interactive chart\n- Test your alerts against historical data\n- Send notifications to Slack, MS Teams, Email, Telegram, Jira, Mattermost, Command, Gitter, Amazon SNS, Amazon SES, Zabbix, Twilio, PagerTree, Exotel, GoogleChat, Stomp, Splunk On-Call (Formerly VictorOps), ServiceNow, Chatwork, Discord, TheHive, Alerta, Datadog, Rocket.Chat, PagerDuty, Tencent SMS, Dingtalk, Alertmanager, OpsGenie, Graylog GELF, Lark, IRIS, WorkWechat, Matrix Hookshot\n, Microsoft Power Automate or an HTTP POST/HTTP POST 2 endpoint\n- Supports the Any, Blacklist, Whitelist, Change, Frequency, Flatline, Spike, Cardinality, New Term, and Metric Aggregation rule types\n- View logs of when your alerts check, fire and fail\n\n\u003cbr\u003e\n\u003cbr\u003e\n\n👉 Praeco is a completely free GPLv3 project, in return I only ask that you fill out [this simple survey](https://forms.gle/nAbu1RN2KHnyXX7L8) about how you use it.\n\n##\n\n![](https://user-images.githubusercontent.com/611996/47752071-7c4a9080-dc61-11e8-8ccf-2196f13429b2.png)\n\n\n## Quickstart\n\nRun the app using Docker compose. Praeco includes everything you need to get started. Just provide it the IP address of your Elasticsearch instance.\n\n```bash\nmkdir -p rules rule_templates\nchmod -R 777 rules rule_templates\necho \"slack_webhook_url: ''\"  | sudo tee -a rules/BaseRule.config \u003e/dev/null\nexport PRAECO_ELASTICSEARCH=\u003cyour elasticsearch ip\u003e\ndocker-compose up\n```\n\n* Don't use 127.0.0.1 for PRAECO_ELASTICSEARCH. See first item under the Troubleshooting section.\n\n* To set up notification settings like API keys edit `rules/BaseRule.config`.\n\nPraeco should now be available on http://127.0.0.1:8080\n\n~~A walkthrough article is available to guide you through creating your first rule.~~\n\n\n## Upgrading\n\nIf you use docker-compose.yml published on github as it is, it will be the current latest version instead of a specific version. If you want to specify a specific version, edit it yourself and then run `docker-compose up --force-recreate --build`.\n\n```\ndocker-compose down \ndocker rmi praecoapp/praeco:latest\ndocker rmi praecoapp/elastalert-server:latest\ndocker pull praecoapp/praeco:latest\ndocker pull praecoapp/elastalert-server:latest\ndocker-compose up --force-recreate --build\n```\n\nYou may need to update your config files when a new version comes out. Please see [UPGRADING.md](https://github.com/johnsusek/praeco/blob/master/UPGRADING.md) for version-specific instructions.\n\n## Configuration\n\nEdit `rules/BaseRule.config`, `config/api.config.json`, `config/elastalert.yaml`, and/or `public/praeco.config.json` for advanced configuration options. See the [api docs](https://github.com/johnsusek/elastalert-server#configuration) and the [example ElastAlert 2 config](https://github.com/jertel/elastalert/blob/alt/config.yaml.example) for more information.\n\nAny ElastAlert 2 option you put into `rules/BaseRule.config` will be applied to every rule.\n\nThe following config settings are available in praeco.config.json:\n\n```\n// Link back to your Praeco instance, used in Slack alerts\n\"appUrl\": \"http://praeco-app-url:8080\",\n\n// A recordatus (https://github.com/johnsusek/recordatus) instance for javascript error reporting\n\"errorLoggerUrl\": \"\",\n\n// Hide these fields when editing rules, if they are already filled in template\n\"hidePreconfiguredFields\": []\n```\n## DockerHub\n\n[Praeco](https://hub.docker.com/r/praecoapp/praeco)\n\n[ElastAlert Server](https://hub.docker.com/r/praecoapp/elastalert-server)\n\n[Praeco \u0026 elastalert server docker image relations table](https://github.com/johnsusek/praeco/wiki/praeco-\u0026-elastalert-server-docker-image-relations-table)\n\n[praecoapp/elastalert-server ChangeLog](https://github.com/johnsusek/elastalert-server/blob/master/DockerImageLog.md)\n\n## FAQ\n\n#### Is there a sample to start elasticsearch, kibana, elastalert-server, Praeco with docker-compose?\n\n[docker compose sample(telegram)](https://github.com/johnsusek/praeco/wiki/docker-compose-sample(telegram))\n\n#### Please tell me the response status of the alert notification destination.\n\n👉 [ElastAlert 2 Alerts support status](https://github.com/johnsusek/praeco/wiki/ElastAlert-2-Alerts-support-status)\n\n#### Will elastalert-server / Praeco be supported forever?\n\nFirst of all, please understand that it is open source software.\nIf you need generous support, please consider paid support software.\n\n- We are not responsible for fixing bugs.\n- There is no obligation to respond to your request.\n- There is no obligation to add features.\n- We do not always answer issues.\n\n#### It does not work with the combination of bitsensor/elastalert and praeco. Is it a bug?\n\nDo not use `bitsensor/elastalert` as it does not implement the features required by praeco. Use `praecoapp/elastalert-server`.\n\n#### It does not work with the combination of karql/elastalert2-server and praeco. Is it a bug?\n\nDo not use `karql/elastalert2-server` as it does not implement the features required by praeco. Use `praecoapp/elastalert-server`.\n\n#### Does [yelp/elastalert](https://github.com/Yelp/elastalert) support it?\n\nyelp/elastalert is no longer supported as maintenance has been discontinued.\n\nMain challenges of yelp/elastalert\n- Not compatible with python 3.12 or later.\n- PagerTree, Stomp and Zabbix alert notifications do not work due to a bug.\n- kibana Discover only guarantees operation up to kibana 7.3.\n\n#### Does it support elasticsearch 5.x?\n\nNot Support\n\n#### Doesi support elasticserch 6.x?`\n\nElasticserch 6 is no longer supported from elastalert2 2.4.0.\u003cbr\u003e\nPlease use `praecoapp/elastalert-server:20220109` with elastalert2 installed before 2.4.0.\n\n#### Does it support elasticsearch 7.x?\n\nSupport\n\n#### Does it support elasticsearch 8.x?\n\n- Supports elasticsearch 8 with praeco 1.8.11 or later.\u003cbr\u003e\n- elastalert-server is compatible with elasticsearch 8.\n\n#### Can you support a version that is not the latest version?\n\nNot Support\n\n#### Is it possible to set Percentage Match on the screen?\n\nNot Support\n\n#### Is it possible to set Spike Aggregation on the screen?\n\nNot Support\n\n#### Is it possible to set custom format (timestamp_type, timestamp_format, timestamp_format_expr) on the screen?\n\nNot Support\n\n#### Does elasticsearch-oss?\n\nNot Support\n\n#### Does elastalert-server support Amazon OpenSearch Service (formerly Amazon Elasticsearch)?\n\nNot Support\n\n#### Does elastalert-server support OpenSearch?\n\nNot Support\n\n#### Does elastalert-server support Elastic Cloud CloudID connections?\n\nNot Support\n\n#### Does elastalert-server support Elasticsearch ApiKey authentication connections?\n\nNot Support\n\n#### Does elastalert-server support Elasticsearch Bearer authentication connections?\n\nNot Support\n\n#### Does elastalert-server support Elasticsearch proxy connections?\n\nNot Support\n\n#### Mulit-elasticsearch instances\n\nNot Support\n\n#### If the contents of BaseRule.config are empty, an error will occur.\n\nCurrently, an error will occur when BaseRule.config is empty, so please make it as described below.\n\n```\necho \"slack_webhook_url: ''\"  | sudo tee -a rules/BaseRule.config \u003e/dev/null\n```\n\n#### Are you planning to add a login screen?\n\nThere are no plans to support this at this time.\n\n#### Are you planning to support Email_format for Email?\n\nThere are no plans to support this at this time.\n\n#### I can't send an email when I specify a gmail or Microsoft 365 address in from_addr of Email. Is there a workaround?\n\n- For Gmail, you need to set Allow insecure apps.\n- There is no workaround for Microsoft 365.\n\n#### Is it possible to raise an alert only during a specific time period?\n\nIt is possible to set within or outside the time zone specified in the Use Time Window.\n\n![2](https://user-images.githubusercontent.com/22293449/118377946-557bbc00-b60b-11eb-8d3d-1b420b018f52.PNG)\n\n#### Is it possible to execute the rule only at a specific time?\n\nIt can be set with Limit Excecution.\n\n![2](https://user-images.githubusercontent.com/22293449/118377997-a1c6fc00-b60b-11eb-802d-16587434db9d.PNG)\n\n#### When using the field specified by alert_subject_args in alert_subject, how do you set it on the screen?\n\n- Click the Alert Subject Args link for the number of fields you want to add and press the \"Add alert_textargs\" button. Enter the field you want to add.\n- When embedding a field in Subject, specify a serial number from 0, such as {0} for the first and {1} for the second.\n\n![1](https://user-images.githubusercontent.com/22293449/118377731-1305af80-b60a-11eb-9f41-3c8d698e8fb1.PNG)\n\n#### When using the field specified by alert_text_args in alert_text, how do you set it on the screen?\n\n- Click the AlertTextArgs link for as many fields as you want to add and press the \"Add alert_textargs\" button. Enter the field you want to add.\n- When embedding a field in Body text, specify a serial number from 0, such as {0} for the first and {1} for the second.\n\n![2](https://user-images.githubusercontent.com/22293449/118377737-18fb9080-b60a-11eb-84a5-1facfdc5bca9.PNG)\n\n#### [Third Party Tools] ElastAlert Server \u0026 Praeco Helm Chart\n\n[ElastAlert Server Helm Chart](https://github.com/daichi703n/elastalert-helm)\u003cbr\u003e\n[Praeco Helm Chart](https://github.com/daichi703n/praeco-helm)\u003cbr\u003e\n[Installing Praeco (ElastAlert GUI) into Kubernetes with Helm](https://en-designetwork.daichi703n.com/entry/2020/02/24/praeco-helm-kubernetes)\n\n#### How do I change ElastAlert 2 options, like SSL, user/pass, etc?\n\nEdit `config/elastalert.yaml` and uncomment the appropriate lines.\n\n#### [elastalert-server] How do I connect to elasticsearch using SSL?\n\nEdit `config/api.config.json` and set/add `\"es_ssl\": true`.\u003cbr\u003e\noption `\"ea_verify_certs\"`, `\"es_ca_certs\"`, `\"es_client_cert\"`, `\"es_client_key\"`.\u003cbr\u003e\n[configuration](https://github.com/johnsusek/elastalert-server#configuration)\n\n#### [elastalert-server] How do I connect to elasticsearch with a username and password?\n\nEdit `es_username` and `es_password` in `config/api.config.json` and `config/elastalert.yaml`.\n\n#### How do I serve the praeco UI over https?\n\nThe praeco UI is served by an included nginx server (see Dockerfile). Configure it as you would any nginx project by editing the files in `nginx_config`. Then update your docker-compose.yml and add your certificate files (under webapp volumes). Another option is using a reverse proxy.\n\n#### How do I serve the praeco UI under a custom base path, i.e. `http://www.my-domain.com:8080/my-path/`\n\nUncomment the declaration of the `VUE_APP_BASE_URL` environment variable in `docker-compose.yml` and define the path you want.\n```yaml\n    environment:\n      VUE_APP_BASE_URL: /my-path/\n```\nUncomment the rewrite command in `nginx.config/default.conf` and define the same path as in teh environment variable above.\n```\nrewrite ^/my-path(/.*)$ $1 last;\n```\n#### How do I change the writeback index?\n\nEdit `config/elastalert.yaml` and `config/api.config.json` and change the writeback_index values.\n\n#### How do I run this on Windows?\n\nFirst, install docker and docker-compose.\n\nThen, using powershell, run these commands:\n\n```\n$Env:PRAECO_ELASTICSEARCH=\"1.2.3.4\"\ndocker-compose.exe up\n```\n\nReplace 1.2.3.4 with your Elasticsearch IP.\n\n#### Can I import my current ElastAlert 2 rules into praeco?\n\nUnfortunately this is not a possibility for two reasons. First, praeco only supports a subset of ElastAlert 2 features, so only certain rules would work. Second, praeco cannot automatically create the query builder ui from an arbitrary ElastAlert 2 `filter` entry, due to the potential complexity and combinations of filters someone can put in their rule file.\n\n#### Can I export my praeco rules into another elastalert  2 instance?\n\nYes, the praeco rule files are 100% compatible with other elastalert servers.\n\n## Troubleshooting\n\n#### I am using 127.0.0.1 for PRAECO_ELASTICSEARCH and it isn't working\n\nPraeco, running within a docker container, cannot communicate with your ES bound to localhost. You need to change your ES `network.host` setting\nto something different. The value of `_site_` is suggested, that will bind to a local network IP on your machine. Then use that\nIP address for PRAECO_ELASTICSEARCH. Here's a working example:\n\n```sh\nelasticsearch -E network.host=_site_\nexport PRAECO_ELASTICSEARCH=192.168.1.145\nmkdir -p rules rule_templates\nchmod -R 777 rules rule_templates\ndocker-compose up\n```\n\nReplace 192.168.1.145 with the IP address your ES binds to (look for bound_addresses in the elasticsearch launch log).\n\n#### I am getting high CPU usage on some of my rules\n\nWhen editing a rule, click \"WITH OPTIONS\" and try using the \"Use count query\" option. This can dramatically speed up processing time for large amounts of data (tens of thousands of results).\n\n#### I'm not receiving alerts even though I expect them\n\nFirst of all, try to test your alert with varying time frames and see if that is returning any results.\n\nIf the test is returning results, but you are not receiving any alerts, check the error log. There may be a problem with your alerter settings. Make sure you edited rules/BaseRule.config and have correct values in there.\n\nIf the test is not returning results, even though you think it should, try reading the [ElastAlert 2 docs](https://elastalert2.readthedocs.io/en/latest/ruletypes.html#rule-types) for your rule type. Compare the yaml from praeco with the options from the docs to make sure the rule is being created as expected. If praeco is generating the wrong yaml, please file an issue.\n\n#### Failed to establish a new connection: [Errno 111] Connection refused\n\nYou will see this error when launching if praeco cannot find elasticsearch at the IP address you specified at \\$PRAECO_ELASTICSEARCH. Please make sure you can communicate with this IP address by issuing the following command: `curl http://$PRAECO_ELASTICSEARCH:9200`. If the connection is refused, your machine cannot communicate with Elasticsearch, it may be a networking problem.\n\n#### 404 error in error log for slack webhook\n\nMake sure the channel/username you are trying to post to exists.\n\n#### How to setup TheHive?\n\nPlease see https://elastalert2.readthedocs.io/en/latest/ruletypes.html#thehive for how to configure your BaseRule.config file.\n\n- ``hive_connection`` is set in BaseRule.config.\n\n```yaml\n hive_connection:\n   hive_host: http://localhost\n   hive_port: \u003chive_port\u003e\n   hive_apikey: \u003chive_apikey\u003e\n   hive_proxies:\n     http: ''\n     https: ''\n```\n\n- ``hive_alert_config`` is set on the Praeco screen.\n- Not Support ``hive_observable_data_mapping``.\n\n#### How to setup Slack?\n\nPlease see https://elastalert2.readthedocs.io/en/latest/ruletypes.html#slack for how to configure your BaseRule.config file.\n\n- Replace slack_webhook_url with the URL of your channel.\n- Describe the following settings in BaseRule.config. Please set other settings on the screen.\n\n```yaml\nslack_webhook_url: 'https://hooks.slack.com/services/xxxxxxxxx/xxxxxxxx/xxxxxxxxxxxxxxxxxxx'\n```\n\n#### How to setup Telegram?\n\ntelegram_room_id can be set on the praeco screen.\n\nPlease see https://elastalert2.readthedocs.io/en/latest/ruletypes.html#telegram for how to configure your BaseRule.config file.\n\n- Replace telegram_bot_token with the your bot token.\n- Describe the following settings in BaseRule.config. Please set other settings on the screen.\n\n```yaml\ntelegram_bot_token: 'xxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'\n```\n\n#### How to setup Mattermost? \n\nPlease see https://elastalert2.readthedocs.io/en/latest/ruletypes.html#mattermost for how to configure your `BaseRule.config` file.\n\n- Replace mattermost_webhook_url with the URL of your webhook.\n- Describe the following settings in BaseRule.config. Please set other settings on the screen.\n\n```yaml\nmattermost_webhook_url: 'https://xxxxxx/hooks/xxxxxxxxxxxxxxxx'\n```\n\n#### How to setup Rocket.Chat? \n\nPlease see https://elastalert2.readthedocs.io/en/latest/ruletypes.html#rocket-chat for how to configure your `BaseRule.config` file.\n\n- Replace rocket_chat_webhook_url with the URL of your webhook.\n- Describe the following settings in BaseRule.config. Please set other settings on the screen.\n\n```yaml\nrocket_chat_webhook_url: 'https://xxxxxx/xxxxx/xxxxxxxxxxxxxxxx'\n```\n\n#### How to setup Email?\n\nSorry Not Support email_format.\n\nPlease see https://elastalert2.readthedocs.io/en/latest/ruletypes.html#email for how to configure your `BaseRule.config` file.\n\n[example setting](https://github.com/johnsusek/praeco/issues/245#issuecomment-691523706)\n\nDescribe the following settings in BaseRule.config. Please set other settings on the screen.\n\n```yaml\nsmtp_auth_file: '/opt/elastalert/pass/smtp_auth_user.yaml'\n```\n\nsmtp_auth_user.yaml\n\n```yaml\nuser: xxx@yahoo.co.jp\npassword: xxx\n```\n\nGoogle account in advance → Apps that can access your account → Allow less secure apps: Disabled → Enabled When I specified the Gmail address with from_addr and checked the operation, it worked without problems.\n\n```yaml\nsmtp_auth_file: '/opt/elastalert/smtp/smtp_auth_user.yaml\"\n```\nsmtp_auth_user.yaml\n\n```yaml\nuser: xxx@gmail\npassword: xxx\n```\n\n#### How to setup Jira?\n\nPlease see https://elastalert2.readthedocs.io/en/latest/ruletypes.html#jira for how to configure your `BaseRule.config` file.\n\n## Architecture details\n\n![](https://user-images.githubusercontent.com/611996/52892144-90a19300-3155-11e9-8050-cb4a440411a4.png)\n\nPraeco is a vue.js app (hosted in an nginx docker container) that communicates with the [ElastAlert API](https://github.com/johnsusek/elastalert-server) (running in another docker container) to view/edit rules.\nThe elastalert api interacts with the included [ElastAlert 2](https://github.com/jertel/elastalert2) python daemon directly for various tasks including testing and silencing rules, and indirectly by modifying or creating\nrule files in the rules/ directory.\n\nWhen you run praeco using the quickstart instructions, it runs these two docker containers, per the docker-compose.yml file.\n\nPraeco uses a fork of the elastalert _api server_, which is why the docker image source is [johnsusek/elastalert-server](https://github.com/johnsusek/elastalert-server).\n\nNOTE: Only the _api server_ is a fork, the ElastAlert 2 daemon itself is built from the `master` branch whenever a new version of the `johnsusek/elastalert-server` docker image is created.\n\nPlease see the development section below if you're interested in running these services separately.\n\n## Manual/Dev installation\n\nNOTE: If you're just interested in developing Praeco UI features locally (and not changing ElastAlert 2 or the api), you can skip right to Praeco setup and just run the internal ElastAlert Server with `docker-compose up elastalert-server` .\n\n---\n\nFirst, you need a local copy of the elastalert api server running, which itself needs ElastAlert 2. Start by cloning the neccessary repos\n\n```sh\n$ cd\n$ git clone https://github.com/jertel/elastalert2.git\n$ git clone https://github.com/johnsusek/elastalert-server.git\n$ git clone https://github.com/johnsusek/praeco.git\n```\n\n### Setting up ElastAlert 2\n\n**Python Support version**\n\n- Compatible with 3.12 or later\n\n**Elasticsearch Support version**\n\n- 7.x\n- 8.x\n\nConfigure the ElastAlert 2 `config.yaml` with:\n- Your `es_host`\n- A unique `writeback_index`\n- Change the rules_folder to `rules`\n\n```sh\ncd ~/elastalert2\nmkdir -p rules rule_templates\nchmod -R 777 rules rule_templates\necho \"slack_webhook_url: ''\"  | sudo tee -a rules/BaseRule.config \u003e/dev/null\npip install \"setuptools\u003e=11.3\"\npython setup.py install\ncp ./examples/config.yaml.example ./config.yaml\nvi config.yaml\n```\n\n### Setting up the API server\n\nConfigure the api server `config.json` with:\n- An _absolute path_ to your ElastAlert 2 folder for `elastalertPath`\n- The address of your elasticsearch instance for `es_host`\n- The same `writeback_index` from the config.yaml\n\n```sh\n# nvm install\n# https://github.com/nvm-sh/nvm#install--update-script\ncurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash\n$ vi ~/.bash_profile\n\nexport NVM_DIR=\"$([ -z \"${XDG_CONFIG_HOME-}\" ] \u0026\u0026 printf %s \"${HOME}/.nvm\" || printf %s \"${XDG_CONFIG_HOME}/nvm\")\"\n[ -s \"$NVM_DIR/nvm.sh\" ] \u0026\u0026 \\. \"$NVM_DIR/nvm.sh\" # This loads nvm\n\nsource ~/.bash_profile\n\n# npm \u0026 node install\nnpm install -g npm\nnvm install \"$(cat .nvmrc)\"\n```\n\n```sh\ncd ~/elastalert-server\nvi config/config.json\nnvm use \"$(cat .nvmrc)\"\nnpm install\nnpm run start\n```\n\nYou should see this line if it started successfully:\n```\nINFO elastalert-server: Server:  Server started\n```\n\n### Setting up praeco\n\nFinally, run praeco:\n\n```sh\n# No need to implement if the environment is the same as elastalert-server\n# nvm install\n# https://github.com/nvm-sh/nvm#install--update-script\ncurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash\n$ vi ~/.bash_profile\n\nexport NVM_DIR=\"$([ -z \"${XDG_CONFIG_HOME-}\" ] \u0026\u0026 printf %s \"${HOME}/.nvm\" || printf %s \"${XDG_CONFIG_HOME}/nvm\")\"\n[ -s \"$NVM_DIR/nvm.sh\" ] \u0026\u0026 \\. \"$NVM_DIR/nvm.sh\" # This loads nvm\n\nsource ~/.bash_profile\n\n# npm \u0026 node install\nnpm install -g npm\nnvm install \"$(cat .nvmrc)\"\n\n```sh\ncd ~/praeco\nnvm use \"$(cat .nvmrc)\"\nnpm install\nexport PRAECO_ELASTICSEARCH=\u003cyour elasticsearch ip\u003e\n\n# edit src/main.js\n/api-ws/test to /ws/test\n\n# edit vue.config.js\n/api-ws/test to /ws/test\n\n# run\nnpm run serve\n```\n\nYou should now see the UI running at [http://localhost:8080](http://localhost:8080).\n\nIf you have any difficulties please open a github issue with your problem.\n\n\n\n## Maintainers\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/johnsusek\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/611996?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJohn Susek\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/nsano-rururu\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/22293449?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eNaoyuki Sano\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohnsusek%2Fpraeco","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjohnsusek%2Fpraeco","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohnsusek%2Fpraeco/lists"}