Go 實現 nginx log 讀取 分析 寫入InfluxDB 並用Grafana 顯示
參考:慕課網https://www.imooc.com/learn/982
1. 系統結構
用Go實現檔案讀取,並且將log 分析並寫入InfluxDB,最後用通過配置Grafana 顯示
log file –>log process –> influxdb –> grafana
監控需求:某個協議下的某個請求在某個請求方法的QPS和響應時間和流量
2. Go 接收
- Go 併發執行
- 將複雜的任務拆分,通過goroutine去併發的執行
- 通過channel做資料通訊
- Golang 中物件導向
- struct物件
- interface
- 封裝,繼承,多型
封裝:
type Foo struct {
baz string
}
func (f * Foo) echo() {
fmt.Println(f.baz)
}
繼承:
type Foo struct {
baz string
}
type Bar strct {
Foo
}
Code 實現:https://github.com/itsmikej/imooc_logprocess, 通過看視訊教程,應該可以能夠很好的理解code, 以及理解如何一步步實現模組封裝。
3. InfluxDB
是一個開源的時序性的資料庫,使用GO編寫,被廣泛用於儲存系統的監控資料,IOT行業的實時資料等場景,有以下特性:
- 部署簡單,無外部依賴
- 內建http支援,使用http讀寫
- 類sql的靈活查詢(max,min,sum等)
概念:database: 資料庫;measurement: 資料庫的表,points: 表裡的一行資料(tags: 有索引的屬性,fields:各種記錄的值,time: 時間戳)
寫入資料:
curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_usage,host=server01,region=us-west value=0.64 143405230000000'
讀取資料:
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" --data-urlencode "q=SELECT\"value\"FROM\"cpu_usage\"WHERE "region\"='us-west'"
針對本log 系統:
tags: path, method, scheme, status
Fileds: UpstreamTime, Requestime,BytesSent
Time: Timelocal
安裝:
- docker pull influxdb
- 建立DB,
curl -G http://localhost:8086/query --data-urlencode "q=CREATE DATABASE imooc"
- 建立使用者,
curl "http://localhost:8086/query" --data-urlencode "q=CREATE USER imooc WITH PASSWORD 'imoocpass' WITH ALL PRIVILEGES"
- 啟動container:
docker run -itd -p 8086:8086 -v $PWD:/var/lib/influxd influxdb
4. Grafana
Grafana 可以整合多種資料來源, ES, Mysql 等 可以通過建立漂亮的GUI,實時的顯示資料。只需要配置下Datastore,以及DashBoad
安裝
docker run -d --name=grafana -p 3000:3000 grafana/grafana
Add datastore: 新增 influxdb 的地址,資料庫等資訊。
相關文章
- c# winform下sql圖片二進位制儲存/讀取/顯示/寫入XML/讀取XML顯示C#ORMSQLXML
- Docker 快速實現 【JMeter + InfluxDB + Grafana】 監控方案DockerJMeterUXGrafana
- 用 logstash 從 kafka 讀取資料寫入 Elasticsearch(qbit)KafkaElasticsearch
- python讀取並寫入mat檔案Python
- Flink 1.9 實戰:使用 SQL 讀取 Kafka 並寫入 MySQLKafkaMySql
- locust+influxdb+grafana 實現自定義測試報告UXGrafana測試報告
- 讀取檔案流並寫入檔案流
- 【GO】Elasticsearch的簡單寫入和讀取示例GoElasticsearch
- JMeter+InfluxDB+GrafanaJMeterUXGrafana
- 讀取mysq資料庫l資料,並使用dataview顯示資料庫View
- PlY檔案讀取顯示
- Logstash讀取Kafka資料寫入HDFS詳解Kafka
- Jmeter+Influxdb+Grafana搭建JMeterUXGrafana
- Java讀取本地檔案,並顯示在JSP檔案中JavaJS
- Java從檔案讀入資料並列印到顯示器Java
- QLabel顯示圖片 ,並實現縮放
- Qt 實現 Logger 日誌的顯示QT
- influxDB+Grafana初體驗UXGrafana
- [docker][influxdb][grafana][jmeter] 配置 jmeter 資料至 grafana 展示DockerUXGrafanaJMeter
- PHP實現日誌寫入log.txtPHP
- 關於利用go實現非同步讀寫的寫法分享Go非同步
- iOS自定義log並寫入檔案iOS
- OS實驗八:採用快取記憶體實現檔案讀寫快取記憶體
- 使用 Grafana、collectd 和 InfluxDB 打造現代監控系統GrafanaUX
- Django實現圖片上傳並前端頁面顯示Django前端
- JavaScript 寫入與讀取cookieJavaScriptCookie
- java讀取excel為物件並進行讀寫操作JavaExcel物件
- k8s實踐(十一):heapster+influxdb+grafanaK8SUXGrafana
- Nginx實現URL重寫Nginx
- 讀取顯示CLOB的值,不能讀取啊,請高手指點11!
- 一個java讀取word文件並將其寫入xml文件的例子JavaXML
- 使用Hibernate和Struts向資料庫中儲存、讀取並顯示圖片資料庫
- python xml讀取和寫入PythonXML
- find和ls並用,查詢檔案並顯示大小 .
- AndroidTips:解決Dialog全屏顯示以及Dialog顯示自動彈出輸入法Android
- Go interface實現分析Go
- Angular 實現輸入框中顯示文章標籤Angular
- 用Qt5和OpenCV讀取顯示中文路徑的圖片QTOpenCV