commit
5bc042c0a5
8 changed files with 66 additions and 31 deletions
|
|
@ -52,7 +52,7 @@ Usage of ./endlessh-go
|
||||||
-geoip_supplier string
|
-geoip_supplier string
|
||||||
Supplier to obtain Geohash of IPs. Possible values are "off", "ip-api", "freegeoip", "max-mind-db" (default "off")
|
Supplier to obtain Geohash of IPs. Possible values are "off", "ip-api", "freegeoip", "max-mind-db" (default "off")
|
||||||
-host string
|
-host string
|
||||||
Listening address (default "0.0.0.0")
|
SSH listening address (default "0.0.0.0")
|
||||||
-interval_ms int
|
-interval_ms int
|
||||||
Message millisecond delay (default 1000)
|
Message millisecond delay (default 1000)
|
||||||
-line_length int
|
-line_length int
|
||||||
|
|
@ -68,9 +68,11 @@ Usage of ./endlessh-go
|
||||||
-max_mind_db string
|
-max_mind_db string
|
||||||
Path to the MaxMind DB file.
|
Path to the MaxMind DB file.
|
||||||
-port string
|
-port string
|
||||||
Listening port (default "2222")
|
SSH listening port (default "2222")
|
||||||
-prometheus_entry string
|
-prometheus_entry string
|
||||||
Entry point for prometheus (default "metrics")
|
Entry point for prometheus (default "metrics")
|
||||||
|
-prometheus_host string
|
||||||
|
The address for prometheus (default "0.0.0.0")
|
||||||
-prometheus_port string
|
-prometheus_port string
|
||||||
The port for prometheus (default "2112")
|
The port for prometheus (default "2112")
|
||||||
-stderrthreshold value
|
-stderrthreshold value
|
||||||
|
|
|
||||||
|
|
@ -73,14 +73,39 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"description": "Dashboard for endlessh (add option All to job and host)",
|
"description": "Dashboard for endlessh",
|
||||||
"editable": true,
|
"editable": true,
|
||||||
"fiscalYearStartMonth": 0,
|
"fiscalYearStartMonth": 0,
|
||||||
"gnetId": 15156,
|
"gnetId": 15156,
|
||||||
"graphTooltip": 0,
|
"graphTooltip": 0,
|
||||||
"id": null,
|
"id": null,
|
||||||
"iteration": 1645482521172,
|
"iteration": 1645482521172,
|
||||||
"links": [],
|
"links": [
|
||||||
|
{
|
||||||
|
"asDropdown": false,
|
||||||
|
"icon": "external link",
|
||||||
|
"includeVars": false,
|
||||||
|
"keepTime": false,
|
||||||
|
"tags": [],
|
||||||
|
"targetBlank": true,
|
||||||
|
"title": "GitHub",
|
||||||
|
"tooltip": "GitHub",
|
||||||
|
"type": "link",
|
||||||
|
"url": "https://github.com/shizunge/endlessh-go"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asDropdown": false,
|
||||||
|
"icon": "external link",
|
||||||
|
"includeVars": false,
|
||||||
|
"keepTime": false,
|
||||||
|
"tags": [],
|
||||||
|
"targetBlank": true,
|
||||||
|
"title": "Grafana",
|
||||||
|
"tooltip": "Grafana Dashboard",
|
||||||
|
"type": "link",
|
||||||
|
"url": "https://grafana.com/grafana/dashboards/15156"
|
||||||
|
}
|
||||||
|
],
|
||||||
"liveNow": false,
|
"liveNow": false,
|
||||||
"panels": [
|
"panels": [
|
||||||
{
|
{
|
||||||
|
|
@ -1461,6 +1486,6 @@
|
||||||
"timezone": "",
|
"timezone": "",
|
||||||
"title": "Endlessh",
|
"title": "Endlessh",
|
||||||
"uid": "ATIxYkO7k",
|
"uid": "ATIxYkO7k",
|
||||||
"version": 7,
|
"version": 8,
|
||||||
"weekStart": ""
|
"weekStart": ""
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,6 @@
|
||||||
# Examples
|
# Examples
|
||||||
|
|
||||||
## docker compose
|
## docker-simple
|
||||||
|
|
||||||
This is an example how to setup endlessh-go, Prometheus, and Grafana using [docker compose](https://docs.docker.com/compose/). The reference of the compose file can be found [here](https://docs.docker.com/compose/compose-file/).
|
An example how to setup endlessh-go, Prometheus, and Grafana using [docker compose](https://docs.docker.com/compose/).
|
||||||
|
|
||||||
*prometheus.yml* is used as a [Prometheus configuration](https://prometheus.io/docs/prometheus/latest/configuration/configuration/).
|
|
||||||
|
|
||||||
*grafana-datasource.yml* is used to provision a data source for Grafana to ease the setup, though Grafana data source can also be setup manually.
|
|
||||||
|
|
||||||
To start the stack, in the *examples* folder, run:
|
|
||||||
|
|
||||||
```
|
|
||||||
sudo docker-compose up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
This example exposes the following ports. Except the SSH port, you should not expose other ports to public without protections (not included in this example) in production.
|
|
||||||
|
|
||||||
* **2222**: The SSH port. You may test endlessh-go by running `ssh -p 2222 localhost`. Your SSH client should hang. View the log of endlessh-go by running `sudo docker logs endlessh`.
|
|
||||||
* **2112**: The Prometheus metrics exported by endlessh-go. Go to [http://localhost:2112/metrics](http://localhost:2112/metrics) in your web browser to view the metrics.
|
|
||||||
* **9090**: Prometheus web interface. Go to [http://localhost:9090](http://localhost:9090) in your web browser for Prometheus. You can check whether the target of endlessh-go is up (Click Status, then Targets).
|
|
||||||
* **3000**: Grafana. Go to [http://localhost:3000](http://localhost:3000) in your web browser for Grafana. Use username *examples* and password *examples* to login.
|
|
||||||
|
|
||||||
In this example, we do not provision a dashboard for Grafana. You need to manually load the endlessh-go dashboard, by either importing it from the Grafana.com using ID [15156](https://grafana.com/grafana/dashboards/15156), or pasting the dashboard JSON text to the text area. See the [Grafana documentation](https://grafana.com/docs/grafana/latest/dashboards/export-import/) about import. Then select *Prometheus* as the data source.
|
|
||||||
|
|
|
||||||
22
examples/docker-simple/README.md
Normal file
22
examples/docker-simple/README.md
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
## docker compose
|
||||||
|
|
||||||
|
This is an example how to setup endlessh-go, Prometheus, and Grafana using [docker compose](https://docs.docker.com/compose/). The reference of the compose file can be found [here](https://docs.docker.com/compose/compose-file/).
|
||||||
|
|
||||||
|
*prometheus.yml* is used as a [Prometheus configuration](https://prometheus.io/docs/prometheus/latest/configuration/configuration/).
|
||||||
|
|
||||||
|
*grafana-datasource.yml* is used to provision a data source for Grafana to ease the setup, though Grafana data source can also be setup manually.
|
||||||
|
|
||||||
|
To start the stack, in the *examples* folder, run:
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
This example exposes the following ports. Except the SSH port, you should not expose other ports to public without protections (not included in this example) in production.
|
||||||
|
|
||||||
|
* **2222**: The SSH port. You may test endlessh-go by running `ssh -p 2222 localhost`. Your SSH client should hang. View the log of endlessh-go by running `sudo docker logs endlessh`.
|
||||||
|
* **2112**: The Prometheus metrics exported by endlessh-go. Go to [http://localhost:2112/metrics](http://localhost:2112/metrics) in your web browser to view the metrics.
|
||||||
|
* **9090**: Prometheus web interface. Go to [http://localhost:9090](http://localhost:9090) in your web browser for Prometheus. You can check whether the target of endlessh-go is up (Click Status, then Targets).
|
||||||
|
* **3000**: Grafana. Go to [http://localhost:3000](http://localhost:3000) in your web browser for Grafana. Use username *examples* and password *examples* to login.
|
||||||
|
|
||||||
|
In this example, we do not provision a dashboard for Grafana. You need to manually load the endlessh-go dashboard, by either importing it from the Grafana.com using ID [15156](https://grafana.com/grafana/dashboards/15156), or pasting the dashboard JSON text to the text area. See the [Grafana documentation](https://grafana.com/docs/grafana/latest/dashboards/export-import/) about import. Then select *Prometheus* as the data source.
|
||||||
16
main.go
16
main.go
|
|
@ -44,7 +44,7 @@ var (
|
||||||
clientSeconds *prometheus.CounterVec
|
clientSeconds *prometheus.CounterVec
|
||||||
)
|
)
|
||||||
|
|
||||||
func initPrometheus(connHost, prometheusPort, prometheusEntry string) {
|
func initPrometheus(prometheusHost, prometheusPort, prometheusEntry string) {
|
||||||
totalClients = prometheus.NewCounterFunc(
|
totalClients = prometheus.NewCounterFunc(
|
||||||
prometheus.CounterOpts{
|
prometheus.CounterOpts{
|
||||||
Name: "endlessh_client_open_count_total",
|
Name: "endlessh_client_open_count_total",
|
||||||
|
|
@ -99,8 +99,8 @@ func initPrometheus(connHost, prometheusPort, prometheusEntry string) {
|
||||||
prometheus.MustRegister(clientSeconds)
|
prometheus.MustRegister(clientSeconds)
|
||||||
http.Handle("/"+prometheusEntry, promhttp.Handler())
|
http.Handle("/"+prometheusEntry, promhttp.Handler())
|
||||||
go func() {
|
go func() {
|
||||||
glog.Infof("Starting Prometheus on %v:%v, entry point is /%v", connHost, prometheusPort, prometheusEntry)
|
glog.Infof("Starting Prometheus on %v:%v, entry point is /%v", prometheusHost, prometheusPort, prometheusEntry)
|
||||||
http.ListenAndServe(connHost+":"+prometheusPort, nil)
|
http.ListenAndServe(prometheusHost+":"+prometheusPort, nil)
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -109,9 +109,10 @@ func main() {
|
||||||
bannerMaxLength := flag.Int64("line_length", 32, "Maximum banner line length")
|
bannerMaxLength := flag.Int64("line_length", 32, "Maximum banner line length")
|
||||||
maxClients := flag.Int64("max_clients", 4096, "Maximum number of clients")
|
maxClients := flag.Int64("max_clients", 4096, "Maximum number of clients")
|
||||||
connType := flag.String("conn_type", "tcp", "Connection type. Possible values are tcp, tcp4, tcp6")
|
connType := flag.String("conn_type", "tcp", "Connection type. Possible values are tcp, tcp4, tcp6")
|
||||||
connHost := flag.String("host", "0.0.0.0", "Listening address")
|
connHost := flag.String("host", "0.0.0.0", "SSH listening address")
|
||||||
connPort := flag.String("port", "2222", "Listening port")
|
connPort := flag.String("port", "2222", "SSH listening port")
|
||||||
prometheusEnabled := flag.Bool("enable_prometheus", false, "Enable prometheus")
|
prometheusEnabled := flag.Bool("enable_prometheus", false, "Enable prometheus")
|
||||||
|
prometheusHost := flag.String("prometheus_host", "0.0.0.0", "The address for prometheus")
|
||||||
prometheusPort := flag.String("prometheus_port", "2112", "The port for prometheus")
|
prometheusPort := flag.String("prometheus_port", "2112", "The port for prometheus")
|
||||||
prometheusEntry := flag.String("prometheus_entry", "metrics", "Entry point for prometheus")
|
prometheusEntry := flag.String("prometheus_entry", "metrics", "Entry point for prometheus")
|
||||||
geoipSupplier := flag.String("geoip_supplier", "off", "Supplier to obtain Geohash of IPs. Possible values are \"off\", \"ip-api\", \"freegeoip\", \"max-mind-db\"")
|
geoipSupplier := flag.String("geoip_supplier", "off", "Supplier to obtain Geohash of IPs. Possible values are \"off\", \"ip-api\", \"freegeoip\", \"max-mind-db\"")
|
||||||
|
|
@ -123,8 +124,11 @@ func main() {
|
||||||
}
|
}
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
|
if *connType == "tcp6" && *prometheusHost == "0.0.0.0" {
|
||||||
|
*prometheusHost = "[::]"
|
||||||
|
}
|
||||||
if *prometheusEnabled {
|
if *prometheusEnabled {
|
||||||
initPrometheus(*connHost, *prometheusPort, *prometheusEntry)
|
initPrometheus(*prometheusHost, *prometheusPort, *prometheusEntry)
|
||||||
}
|
}
|
||||||
|
|
||||||
rand.Seed(time.Now().UnixNano())
|
rand.Seed(time.Now().UnixNano())
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue