Opserver 初探一《Opserver的搭建》

本文介绍了如何搭建和配置Opserver监控系统,包括环境搭建、安全配置、Redis和SQL Server的具体配置方法。Opserver是一款由Stack Overflow开源的监控工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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监控页面不呈现。

### 关于Python入门教学案例 对于初学者来说,选择合适的学习资源至关重要。通过观看零基础学习视频,可以跟随教师的讲解逐步掌握编程技能[^3]。 #### 使用Jupyter Notebook编写简单的Python程序 Jupyter Notebook是个非常适合新手使用的交互式开发环境。下面展示如何创建并运行第个Python程序: ```python print("欢迎来到Python的世界!") ``` 这段代码会在控制台输出条问候语句,让学员感受到即时反馈带来的成就感。 #### 数据类型与变量操作练习 了解基本数据类型及其相互转换方法是编程的基础之。这里提供几个简单例子供参考: ```python # 定义整数型变量 age = 20 print(f"年龄为 {age}") # 字符串拼接 name = "Alice" greeting = f"你好, {name}" print(greeting) # 浮点数运算 price = 9.75 tax_rate = 0.08 total_cost = price * (1 + tax_rate) print(f"含税总价为{round(total_cost, 2)}元") ``` 这些实例有助于加深对不同类型数据的理解以及实际应用中的灵活运用能力。 #### 控制结构实践——条件判断与循环遍历 掌握流程控制逻辑能够使编写的程序更加智能化。以下是两个典型的应用场景: ##### 条件分支处理 当需要根据不同情况执行不同动作时可采用if...elif...else语句来实现决策树式的业务逻辑: ```python score = int(input('请输入成绩: ')) if score >= 90: grade = 'A' elif score >= 80: grade = 'B' elif score >= 60: grade = 'C' else: grade = 'D' print(f'您的等级为:{grade}') ``` ##### 循环迭代列表元素 利用for循环配合range()函数轻松完成重复性任务的同时还能提高效率: ```python numbers = list(range(1, 6)) squared_numbers = [] for num in numbers: squared_num = num ** 2 squared_numbers.append(squared_num) print(f"{numbers} 中每个数字平方后的结果为 {squared_numbers}") ``` 以上内容涵盖了从安装配置到核心概念介绍再到具体功能实现等多个方面,旨在帮助读者快速建立起完整的知识体系框架[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值