windows下從c#+influxdb+grafana搭建學習

一、influxdb安裝教程

下載地址:https://portal.influxdata.com/downloads/
我是在window環境下安裝的,所以下載的是window客戶端,下載解壓後的內容如下:
在這裏插入圖片描述
修改配置文件的內容
在這裏插入圖片描述在這裏插入圖片描述
配置文件修改好了,雙擊運行influxd.exe
在這裏插入圖片描述
然後雙擊influx.exe程序啓動CLI控制檯:
在這裏插入圖片描述
之後就可以對influxdb操作了。

二、influxdb增刪改查操作

1. influxdb的數據格式

在InfluxDB中的數據是通過“時間序列組織的“,時序數據中包括瞭如下內容:
(1)time(一個時間戳)
(2)measurement(可測量變量,指標值,例如cpu_load和溫度,可以理解爲關係數據庫裏面的表)
(3)至少一個key=value格式的field(描述指標的數值,例如“value=0.34”或者“temperature=33.2”)
(4)零個或者多個tag(一般是對於這個指標值的元數據,例如“host=server01”,"region=“beijing”,使用這個可以方便分組,加快查詢)

在概念上,你可以把一個measurement看做是一個SQL表,主索引一直都是時間。tags和fields實際上是表中的列。tags會被索引,但是fields不會。區別是,使用InfluxDB,你可以有百萬個測量變量,但是不需要設計前面的架構,空值不會被存儲。

將數據點寫入InfluxDB,只需要遵守如下的行協議(注意tag是用逗號分隔的,fileld前後用空格分隔):

<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]

2. 插入一個數據

格式:

insert <measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]

在這裏插入圖片描述

3.待續

三、grafana安裝

下載地址:https://grafana.com/docs/grafana/latest/installation/windows/
下載後解壓,找到.\conf\defaults.ini文件(或者sample.ini文件也行),複製然後重命名爲custom.ini。這樣就會找我們自定義的配置文件custom.ini,修改custom.ini裏面的配置即可。主要是端口,我這裏改成了13000。
在這裏插入圖片描述
默認是3000,之前遇到過坑,所以不建議自定義端口小於10000.

改完保存之後,直接運行bin文件夾中的grafana-server.exe,雙擊grafana-server.exe運行或者命令行運行,最好是用命令行的方式運行(start+空格+要運行的程序的絕對路徑和程序名)。

啓動服務後訪問地址: http://localhost:13000 ,賬號密碼均爲 “admin” ,登錄成功要求更改密碼纔可訪問。
在這裏插入圖片描述
登錄之後直接就會提示更改密碼:
在這裏插入圖片描述

四、grafana添加influxdb

1. 在首頁點擊Add data source,之後選擇influxdb,進入到如下界面

在這裏插入圖片描述
其中主要需要關注的是Name、Type、HTTP Settings,以及InfluxDB Details:
Name 數據源名稱,建議以數據源類型+用途命名
Type 數據源類型,選擇對應的InfluxDB即可
URL 填寫InfluxDB對應的API地址即可,如果Grafana跟InfluxDB不在同一臺機器,將localhost換成IP即可
Access API訪問方式,一共有Direct和Proxy兩個選項。建議選擇Proxy
Access-Direct 瀏覽器直連數據源API,然後由Grafana解析返回的數據
Access-Proxy Grafana後端通過API訪問數據源,然後返回給瀏覽器展示
Database InfluxDB數據源對應數據庫名稱
User InfluxDB數據源賬號密碼

2. 成功添加數據庫後,新建dashboard錶盤

儀表盤(Dashboard),顧名思義,就是管理各種圖表的地方。
儀表盤由行(Row)+圖表面板(Panel)組成。
Panel主要支持:Graph,Singlestat,Dashlist,Table和Text。

儀表盤(Dashboard)添加入口:

http://localhost:13000/dashboard/new

添加儀表盤(Dashboard),寫好語句,類似SQL,,形成的圖表如下所示
在這裏插入圖片描述

五、使用c# 操作influxdb

1.使用nuget包管理器添加相關第三方庫

在這裏插入圖片描述
注意::influxData.Net這個庫不支持.net framework 4.5.2以下的項目,如果需要使用的話,最好先進行一下升級,使用4.6.1就行了。

2. 使用influxData.net庫

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using InfluxData.Net.Common.Enums;
using InfluxData.Net.InfluxDb;
using InfluxData.Net.InfluxDb.Models;

namespace InfluxDbDemo
{
    public class InfoController
    {
        //聲明InfluxDbClient
        private InfluxDbClient clientDb;

        public InfoController()
        {
            //連接InfluxDb的API地址、賬號、密碼
            var infuxUrl = "http://localhost:8086/";
            var infuxUser = "admin";
            var infuxPwd = "admin";

            //創建InfluxDbClient實例
            clientDb = new InfluxDbClient(infuxUrl, infuxUser, infuxPwd, InfluxDbVersion.Latest);
        }


        /// <summary>
        /// 從InfluxDB中讀取數據
        /// </summary>
        public async void GetData()
        {
            //傳入查詢命令,支持多條
            var queries = new[]{" SELECT * FROM LogInfo WHERE time> now() - 24h "};
            var dbName = "DBTest";

            //從指定庫中查詢數據
            var response = await clientDb.Client.QueryAsync(queries, dbName);
            //得到Serie集合對象(返回執行多個查詢的結果)
            var series = response.ToList();
            //取出第一條命令的查詢結果,是一個集合
            var list = series[0].Values;
            //從集合中取出第一條數據
            var info_model = list.FirstOrDefault();
        }



        /// <summary>
        /// 往InfluxDB中寫入數據
        /// </summary>
        public void AddData(Object message)
        {
            //基於InfluxData.Net.InfluxDb.Models.Point實體準備數據
            for (int i = 0; i < 100; ++i)
            {
                var point_model = new Point()
                {
                    Name = "logInfo2",//表名
                    Tags = new Dictionary<string, object>() { { "productName", "GDQ" }, { "cichennal", "cinchennal" } },
                    Fields = new Dictionary<string, object>() { { "message", message.ToString() + "___" + i.ToString() } },
                    Timestamp = DateTime.UtcNow
                };
                var dbName = "DBTest";

                //從指定庫中寫入數據,支持傳入多個對象的集合
                var response = clientDb.Client.WriteAsync(point_model, dbName);
                Thread.Sleep(50);
            }
            
        }
    }
    class Program
    {

        static void Main(string[] args)
        {
            InfoController infoController = new InfoController();
            Console.WriteLine("In Main: Creating the Child thread");
            List<Thread> threadPool = new List<Thread>();
            for(int i = 0; i < 1000; ++i)
            {
                Thread childThread = new Thread(new ParameterizedThreadStart(infoController.AddData));
                threadPool.Add(childThread);
                childThread.Start(i);
                
            }
            for(int i = 0; i < threadPool.Count(); ++i)
            {
                threadPool[i].Join();
            }
            Console.WriteLine("ok");
            Console.ReadKey();
        }
    }
}

最後實現的效果如圖:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章