From 6a778fd61a6be2a98e86588614068457ed6ec6b6 Mon Sep 17 00:00:00 2001 From: Nicolas Lamirault Date: Sat, 16 May 2020 16:14:59 +0200 Subject: [PATCH] Add: Loki to onprem.logging (#139) * Add: Loki to onprem.logging Signed-off-by: Nicolas Lamirault * Update: resize image using convert Signed-off-by: Nicolas Lamirault * Fix: typo Signed-off-by: Nicolas Lamirault * Update: use tools autogen Signed-off-by: Nicolas Lamirault --- diagrams/onprem/logging.py | 4 ++ docs/nodes/onprem.md | 135 +++++++++++++++++++------------------- resources/onprem/logging/loki.png | Bin 0 -> 19766 bytes 3 files changed, 72 insertions(+), 67 deletions(-) create mode 100644 resources/onprem/logging/loki.png diff --git a/diagrams/onprem/logging.py b/diagrams/onprem/logging.py index c948564..f0cbd2a 100644 --- a/diagrams/onprem/logging.py +++ b/diagrams/onprem/logging.py @@ -16,6 +16,10 @@ class Logstash(_Logging): _icon = "logstash.png" +class Loki(_Logging): + _icon = "loki.png" + + # Aliases LogStash = Logstash diff --git a/docs/nodes/onprem.md b/docs/nodes/onprem.md index 729b3cf..829bd32 100644 --- a/docs/nodes/onprem.md +++ b/docs/nodes/onprem.md @@ -5,25 +5,6 @@ title: OnPrem Node classes list of onprem provider. -## onprem.database - -- **diagrams.onprem.database.Cassandra** -- **diagrams.onprem.database.Clickhouse**, **ClickHouse** (alias) -- **diagrams.onprem.database.Cockroachdb**, **CockroachDB** (alias) -- **diagrams.onprem.database.Couchdb**, **CouchDB** (alias) -- **diagrams.onprem.database.Dgraph** -- **diagrams.onprem.database.Hbase**, **HBase** (alias) -- **diagrams.onprem.database.Influxdb**, **InfluxDB** (alias) -- **diagrams.onprem.database.Janusgraph**, **JanusGraph** (alias) -- **diagrams.onprem.database.Mariadb**, **MariaDB** (alias) -- **diagrams.onprem.database.Mongodb**, **MongoDB** (alias) -- **diagrams.onprem.database.Mssql**, **MSSQL** (alias) -- **diagrams.onprem.database.Mysql**, **MySQL** (alias) -- **diagrams.onprem.database.Neo4J** -- **diagrams.onprem.database.Oracle** -- **diagrams.onprem.database.Postgresql**, **PostgreSQL** (alias) -- **diagrams.onprem.database.Scylla** - ## onprem.security - **diagrams.onprem.security.Trivy** @@ -36,14 +17,29 @@ Node classes list of onprem provider. - **diagrams.onprem.ci.Teamcity**, **TC** (alias) - **diagrams.onprem.ci.Travisci**, **TravisCI** (alias) -## onprem.etl +## onprem.cd -- **diagrams.onprem.etl.Embulk** +- **diagrams.onprem.cd.Spinnaker** ## onprem.mlops - **diagrams.onprem.mlops.Polyaxon** +## onprem.container + +- **diagrams.onprem.container.Docker** +- **diagrams.onprem.container.Rkt**, **RKT** (alias) + +## onprem.etl + +- **diagrams.onprem.etl.Embulk** + +## onprem.vcs + +- **diagrams.onprem.vcs.Git** +- **diagrams.onprem.vcs.Github** +- **diagrams.onprem.vcs.Gitlab** + ## onprem.network - **diagrams.onprem.network.Apache** @@ -64,39 +60,62 @@ Node classes list of onprem provider. - **diagrams.onprem.network.Vyos**, **VyOS** (alias) - **diagrams.onprem.network.Zookeeper** -## onprem.inmemory +## onprem.iac -- **diagrams.onprem.inmemory.Aerospike** -- **diagrams.onprem.inmemory.Hazelcast** -- **diagrams.onprem.inmemory.Memcached** -- **diagrams.onprem.inmemory.Redis** +- **diagrams.onprem.iac.Ansible** +- **diagrams.onprem.iac.Awx** +- **diagrams.onprem.iac.Terraform** -## onprem.search +## onprem.logging -- **diagrams.onprem.search.Elasticsearch** -- **diagrams.onprem.search.Solr** +- **diagrams.onprem.logging.Fluentd** +- **diagrams.onprem.logging.Logstash**, **LogStash** (alias) +- **diagrams.onprem.logging.Loki** -## onprem.container +## onprem.analytics -- **diagrams.onprem.container.Docker** -- **diagrams.onprem.container.Rkt**, **RKT** (alias) +- **diagrams.onprem.analytics.Beam** +- **diagrams.onprem.analytics.Flink** +- **diagrams.onprem.analytics.Hadoop** +- **diagrams.onprem.analytics.Hive** +- **diagrams.onprem.analytics.Norikra** +- **diagrams.onprem.analytics.Spark** +- **diagrams.onprem.analytics.Storm** -## onprem.iac +## onprem.database -- **diagrams.onprem.iac.Ansible** -- **diagrams.onprem.iac.Awx** -- **diagrams.onprem.iac.Terraform** +- **diagrams.onprem.database.Cassandra** +- **diagrams.onprem.database.Clickhouse**, **ClickHouse** (alias) +- **diagrams.onprem.database.Cockroachdb**, **CockroachDB** (alias) +- **diagrams.onprem.database.Couchdb**, **CouchDB** (alias) +- **diagrams.onprem.database.Dgraph** +- **diagrams.onprem.database.Hbase**, **HBase** (alias) +- **diagrams.onprem.database.Influxdb**, **InfluxDB** (alias) +- **diagrams.onprem.database.Janusgraph**, **JanusGraph** (alias) +- **diagrams.onprem.database.Mariadb**, **MariaDB** (alias) +- **diagrams.onprem.database.Mongodb**, **MongoDB** (alias) +- **diagrams.onprem.database.Mssql**, **MSSQL** (alias) +- **diagrams.onprem.database.Mysql**, **MySQL** (alias) +- **diagrams.onprem.database.Neo4J** +- **diagrams.onprem.database.Oracle** +- **diagrams.onprem.database.Postgresql**, **PostgreSQL** (alias) +- **diagrams.onprem.database.Scylla** + +## onprem.client + +- **diagrams.onprem.client.Client** +- **diagrams.onprem.client.User** +- **diagrams.onprem.client.Users** ## onprem.compute - **diagrams.onprem.compute.Nomad** - **diagrams.onprem.compute.Server** -## onprem.vcs +## onprem.search -- **diagrams.onprem.vcs.Git** -- **diagrams.onprem.vcs.Github** -- **diagrams.onprem.vcs.Gitlab** +- **diagrams.onprem.search.Elasticsearch** +- **diagrams.onprem.search.Solr** ## onprem.workflow @@ -105,6 +124,10 @@ Node classes list of onprem provider. - **diagrams.onprem.workflow.Kubeflow**, **KubeFlow** (alias) - **diagrams.onprem.workflow.Nifi**, **NiFi** (alias) +## onprem.gitops + +- **diagrams.onprem.gitops.Argocd**, **ArgoCD** (alias) + ## onprem.queue - **diagrams.onprem.queue.Activemq**, **ActiveMQ** (alias) @@ -113,13 +136,12 @@ Node classes list of onprem provider. - **diagrams.onprem.queue.Rabbitmq**, **RabbitMQ** (alias) - **diagrams.onprem.queue.Zeromq**, **ZeroMQ** (alias) -## onprem.cd - -- **diagrams.onprem.cd.Spinnaker** - -## onprem.gitops +## onprem.inmemory -- **diagrams.onprem.gitops.Argocd**, **ArgoCD** (alias) +- **diagrams.onprem.inmemory.Aerospike** +- **diagrams.onprem.inmemory.Hazelcast** +- **diagrams.onprem.inmemory.Memcached** +- **diagrams.onprem.inmemory.Redis** ## onprem.monitoring @@ -129,24 +151,3 @@ Node classes list of onprem provider. - **diagrams.onprem.monitoring.Prometheus** - **diagrams.onprem.monitoring.Splunk** - **diagrams.onprem.monitoring.Thanos** - -## onprem.client - -- **diagrams.onprem.client.Client** -- **diagrams.onprem.client.User** -- **diagrams.onprem.client.Users** - -## onprem.logging - -- **diagrams.onprem.logging.Fluentd** -- **diagrams.onprem.logging.Logstash**, **LogStash** (alias) - -## onprem.analytics - -- **diagrams.onprem.analytics.Beam** -- **diagrams.onprem.analytics.Flink** -- **diagrams.onprem.analytics.Hadoop** -- **diagrams.onprem.analytics.Hive** -- **diagrams.onprem.analytics.Norikra** -- **diagrams.onprem.analytics.Spark** -- **diagrams.onprem.analytics.Storm** diff --git a/resources/onprem/logging/loki.png b/resources/onprem/logging/loki.png new file mode 100644 index 0000000000000000000000000000000000000000..3029249bfdf7e148175d3a0e73290fb81852f260 GIT binary patch literal 19766 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