Opserver 初探一《Opserver的搭建》


Opserver 是Stack Overflow 的開源監控產品。stackoverflow網站是基於asp.net開發的,具體采用的軟硬件配置可以查看《StackOverflow 這么大,究竟用在什么硬件設備》。我們可以了解到stackoverflow的大致運行環境:

數據庫:sql server

緩存服務器:redis

web服務器:windows server/IIS

搜索服務器:ElasticSearch

標簽服務器:未知

負載均衡:HAProxy

 

so, opserver 直接提供的可監控服務是sql server ,redis,ElasticSearch,HAProxy,exception等。

 

1、Opserver 監控搭建

     可以到https://github.com/opserver/Opserver,下載Opserver 源碼,里面包含 Opserver監控網站和Opserver.Core兩個項目。

     直接編譯啟動,會報沒有設置SecuritySettings.config錯誤。查看web.config ,默認指定了文件在Config\SecuritySettings.config

<SecuritySettings configSource="Config\SecuritySettings.config" />

     監控配置設置在“Config\”下的json文件。
   

    找到config文件夾,我們可以看到多個以"*.example"結尾的文件,如:

CloudFlareSettings.json.example      //CloudFlare監控配置
DashboardSettings.json.example       //儀表盤配置
ElasticSettings.json.example         //ElasticSearch監控配置
ExceptionsSettings.json.example //Exceptions異常數據監控配置 HAProxySettings.json.example //HAProxy監控配置 JiraSettings.json.example //Jira問題配置 PagerDutySettings.json.example // PollingSettings.json.example // RedisSettings.json.example //Redis監控配置 SecuritySettings.config.example //Security安全設置 SQLSettings.json.example //sql server配置


查看github opserver介紹和SecuritySettings.config.example,”SecuritySettings.config“為opserver網站的安全配置,example中啟用的默認配置為AD("ad")認證登入,其他還有“alladmin",view all。因環境中沒有AD服務,這里使用"alladmin"配置登錄opserver網站(即所有人都已管理員身份登錄)。

<SecuritySettings provider="alladmin" />

啟動網站,用戶名和密碼可輸也可以不輸,點擊登錄,可以直接進入網站。此時網站顯示可以沒有配置任何監控項。

Uh no! No Configuration found! 

No configuration data was found. This means no Opserver sections are configured/enabled or you have no roles assigned to you. 

See the Readme.txt in /config and *.example files for examples of a basic JSON configuration...or you can implement your own provider to get settings from anywhere. 

If you are using AD authentication, set the ViewGroups or AdminGroups settings in the web.config or in the section-specific configuration. 

You can also browse to /about to see how you have been authenticated and what monitors have been enabled. 

 

2、配置redis監控

從redissetting.json.example上看,配置分“allservers",和”servers"節點,allservers是servers節點的子集,即可以認為allservers等同於是servers的某一個子節點。通過閱讀代碼Opserver.Core項目Setting文件夾下的RedisSettings.cs文件,確定了這一點,allservers是單個Server,servers是List<server>。redis監控數據實例的加載可以查看Opserver.Core項目data/Redis文件夾下的RedisModule.cs

   private static List<RedisConnectionInfo> LoadRedisConnections()
        {
            var result = new List<RedisConnectionInfo>();
            var defaultServerInstances = Current.Settings.Redis.Defaults.Instances;
            var allServerInstances = Current.Settings.Redis.AllServers.Instances;

            foreach (var s in Current.Settings.Redis.Servers)
            {
                var count = result.Count;
                // Add instances that belong to any servers
                allServerInstances?.ForEach(gi => result.Add(new RedisConnectionInfo(s.Name, gi)));

                // Add instances defined on this server
                if (s.Instances.Any())
                    s.Instances.ForEach(i => result.Add(new RedisConnectionInfo(s.Name, i)));

                // If we have no instances added at this point, defaults it is!
                if (defaultServerInstances != null && count == result.Count)
                    defaultServerInstances.ForEach(gi => result.Add(new RedisConnectionInfo(s.Name, gi)));
            }
            return result;
        }

 從中可以看出,allservers和default下的實例配置,會影響servers下的配置,allservers和default的實例被添加到servers的各個節點,可以理解allservers和default的配置為通用配置,另外如果allservers,servers下有實例 ,default下實例不起作用。如果要自定義實例加載,可以修改這段代碼。實際配置中我們只要配置servers就可以了。如:

{
    "Servers": [
       
        {
          "name": "192.168.1.100",
          "instances": [ { "name": "is not cluster Redis", "port": "6379" } ]
        },

        {
          "name": "192.168.1.101",
          "instances": [
          {
              "name": "cluster master",
              "port": "6379",
              "password": "*******"
           }]
        },
       {
          "name": "192.168.1.102",
          "instances": [
          {
              "name": "cluster slave",
              "port": "6379",
              "password": "*******"
           }]
        }
    ]
}


3、SQL SERVER監控

 從SQLSettings.json.example文件中,可以看出sql 配置比較簡單,主要分集群cluster和單實例instance配置,注意所有的name都指網絡機器名,可以用IP代替。具體的配置細節可以查看Opserver.Core項目下setting文件夾的,sqlsetting.cs文件。示例:

{
    "defaultConnectionString": "Data Source=$ServerName$;User ID=sa;Password=*****;Initial Catalog=master;",
    "clusters": [
        {
            "name": "192.168.1.120",
            "refreshIntervalSeconds": 20,
            "nodes": [
                { "name": "192.168.1.121" },
                { "name": "192.168.1.122" },
                { "name": "192.168.1.123" },
            ]
        }
    ],
    "instances": [
        { 
            "name": "192.168.1.131",
            "connectionString":"Data Source=192.168.1.131;User ID=sa;Password=*********;Initial Catalog=master;"
        }
    ]
}

 注意:defaultConnectionString 默認情況下節點不能刪除,值可以為空。集群和實例必須存在其一,不然SQL監控頁面不呈現。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM