如何logging服务器更改?

所以我们都可能有这样的情况:你debugging一些问题,只是意识到这是由你六个月前的configuration改变引起的,你不记得你为什么这样做。 所以你撤消它并解决问题,现在还有其他一些问题。 噢,现在我记得! 然后你正确地修复它。

这是因为你没有记下适当的音符,你是个笨蛋! 但是,这样做的好方法是什么?

在工程中,我们有大量的软件可以帮助我们检测和跟踪变化。 源代码pipe理,代码评论等等。 每一个变化都被追踪,每一个变化都需要一个评论。 典型的工程部门需要很好的评论,以便在六个月内弄清楚为什么这样打破它时,可以使用历史上的“责备”特征或二分查找构build来查明问题。 这些工具是非常有效的沟通工具和历史logging。

但是在服务器端,我们有500个不同的服务,都有不同的configuration方式。 他们并不总是有一个文本格式(考虑设置一个文件夹的权限或更改页面文件的位置),虽然他们可能有文字表示。

在我们的环境中,我们检查哪些configuration文件可以join到Perforce中,但是其中很less。 不能完全检查活动目录数据库..虽然也许是一个转储可能diff'd …

在过去,我尝试过在维基上保留一个手动更改日志,但要维持这个纪律是非常困难的(我知道这不是一个好的借口,但确实很难)。

我的问题:你用什么策略和工具来解决跟踪服务器configuration变化的这个问题?

– 更新 –

注意:我不是在寻找共享笔记logging工具(我熟悉OneNote等),而是专门用于帮助跟踪服务器更改的自动化工具。 有没有全面的工具来跟踪服务器configuration的变化,但也许有一些特定的应用程序,如GPO的。

另外,我对您发现有用的特定策略非常感兴趣。 “我们在Sharepoint中共享笔记”非常含糊。 你如何保持纪律? 你用什么格式来跟踪你的改变? 你如何组织你的变更数据? 我真的很喜欢例子和想法。

在Linux领域,人们正在追求几种不同的策略:

  • configuration约束系统 ,如cfengine或木偶或厨师 。 这些与Windows GPO类似。 需要指出的是,所有的服务器configuration都是有意logging在一个地方,您知道策略是以什么粒度(服务器机房,组,特定服务器)颁布的。 这不会让你从六个月前到底是什么? 但它确实让你只需要一个服务器configuration,并从头开始重build。 你可以把cfengine和puppet策略置于修改控制之下来回答这个问题。
  • 修订控制/等 。 通常,Linux程序将其configuration存储在一个地方,/ etc。 大胆的开始写脚本把/ etc进入修订控制。 我知道的一个这样的程序是etckeeper :
 说明:在git,mercurial,bzr或darcs中存储/ etc
  etckeeper程序是一个让/ etc存储在git,mercurial,
  bzr或darcs存储库。 它挂钩到APT自动提交更改
 在进行软件包升级时向/ etc发送。 它跟踪文件元数据的版本
 控制系统通常不支持,但这对于/ etc等非常重要
 作为/ etc / shadow的权限。 这是相当模块化和可configuration的,而
 如果您了解使用版本的基础知识,也很容易使用
 控制。

在这种情况下的一个问题就是,这真是一个商业stream程/技术问题的结合。 这肯定比追踪pipe理员所做的更改要大得多。 您还需要密切关注意外的更改,以及pipe理员或单位之间的良好协调,以便AD控制器上的更改不会中断某些部门服务器上的数据库权限设置。 即,你的问题是一个巨大的蠕虫:)

在我的组织中,我们大约需要一年的时间来推出stream程和系统来解决这个问题。 对于业务stream程方面,我们组build了一个变更pipe理团队。 根据SOP,生产环境的所有变化都是通过它们来协调的。 他们汇编了所有的变化,范围,受影响的系统,受到影响的服务等。对变更进行良好的logging,以及推出和回滚计划。 主持每周(开放)会议,以了解即将到来的环境变化,然后发送电子邮件详细说明所有这些变化。 这个过程的最终目标是,IT中的每个人都可以有效地知道正在发生的其他事情。 这有助于阻止SysAdmin安装内核修补程序的问题,并重新启动将取消时钟数据库的系统。

至于技术方面,我只能说Unix / Linux的人,因为我不处理Windows。 他们已经推出了由Reductive Labs开发的Puppet,用于所有这些系统的configurationpipe理。 简单地说,就是一个客户机/服务器系统,其中一个在服务器上定义了一个机器configuration,客户端每隔一段时间(默认30分钟)就抓住这些机会。 另外,如果有机会在本地pipe理文件,那么它们也会在当时恢复。 我们用它来pipe理运行服务,防火墙configuration,用户授权等。

我也build议寻找类似TippingPoint的东西。 这是一个客户端服务,监视系统configuration,并发送更改的警报。 这使我们安全的人最高兴。 它主要用于跟踪恶意或未发布的更改。

我现在已经在四五家公司了,我不记得了。

我们都有这个问题。 我们没有人能100%地解决这个问题,但是在我所在的公司,我们有我认为是迄今为止最好的策略。

的Sharepoint /维基/的Evernote /密码

  • 的SharePoint
    • 呻吟所有你想要的…它有一些非常好的列表function。
    • IP地址列表
    • 库存
    • 服务帐户和使用
    • 更改通知日志
  • 维基
    • 怎么对的
    • 远程任务列表
  • Evernote的
    • 我的伙伴和我用这个把我们不想要的所有东西都放到Wiki中
    • 更多的是技术性的
    • 从头笔记我们都需要看
    • 任务占一周
    • 承包商任务清单
    • evernote剪辑器可以轻松地屏幕截图AD /权限设置
    • 无处不在
  • PIN码
    • 密码存储库

其中一些可能有更好的工具,但这是我们使用的:

  • 跟踪私人wiki中每台服务器的configuration更改和升级/修补程序
  • 同时保持维基的howtos和logging问题/解决scheme
  • 使用SharepointGoogle文档来保留静态IP列表等授权副本
  • 使用Subversion来跟踪对configuration文件的更改

对于Windows,查看微软系统中心系列或任何其他竞争对手在该平台的configuration和服务pipe理。

这些变化需要通过体面的变更pipe理程序进行,变更pipe理程序在实际完成之前自行审批并logging。 对于初学者来说,这可以是100%的手动操作。 使用一些更好的集成工具,您可以让工具进行实际的更改,并将“自动”注销到中央configuration数据库 – 而不是单手进入单个服务器的控制台,手工挖掘设置尝试解决牛仔风格的问题。

您绝对应该有一个变更pipe理stream程,特别是如果有多个人有能力/可以在您的环境中对系统级别进行更改。 这也为pipe理层签署潜在变更提供了一种方法,但是如果您不能即时进行更改,则会导致更改过程中的延迟。

跟踪更改的一些方法可能包括SEM中的事件validation(假设您有安全事件pipe理器)或诸如Nessus(具有大量工作可以审计您的环境以查找更改)等工具。

这是一个更本地化,基于* nix的答案。 我还没有find任何好的工具来在Windows下模拟它。

有几种方法可以实现这个…当你忘记的时候抓住它。

版本控制系统像subversion,git,cvs或RCS是跟踪configuration文件历史的好方法。 如果您不想在生产服务器上安装版本控制系统,则使用rsnapshot等本地或远程方式存储configuration文件目录将为您提供RCS的大部分好处,但是您将失去审计或离职提交的可能性日志(尽pipe这可以解决文件内部的注释本身)。

为了帮助您记住变更logging,通过每晚夜间运行的绊网自动报告configuration更改是一个好的开始。 在构buildTripwire的文件的当前状态的数据库之后,对它们的任何改变将在下一次运行期间产生电子邮件。 您将继续收到此邮件,直到更新数据库,从而“重置”tripwire。

我会使用一个问题跟踪系统,如flyspray(任何会做,但我喜欢flyspray非编程的东西)。 在任何人触摸configuration之前,应该logging改进/问题。 当您修复/实施它时,更改将出现在故障单中。

维基可以很好地logging当前的设置,但它很容易过时 – 似乎需要更多的努力来更新IMO。

你不会去find自动化的东西 – 尽pipe你可以设置它,所以如果你想要的话,对某些configuration文件的修改会自动通过电子邮件发送给问题跟踪器。

我认为这只是一个好政策,低障碍工具和纪律问题。

我们在自己的环境中创build了一些本地的变更日志跟踪function。 它不是什么超级复杂的东西,而且工作的很好。

  • 自我pipe理政策的设置是,任何在您的估计中的变化或者偏离开箱即可,或者可能导致问题的变更都应logging在变更日志系统中。
    • 这个“硬币”的另一面是如果你正在解决一个问题,search最近或相关的更新日志条目。
  • login系统并select您要更改的服务器,服务或硬件组件
    • 这些组件先前被input到具有基本“人口”信息(位置,供应商,序列号,主pipe部门)的相同系统中,
  • 从基本类别的下拉列表中进行select
    • 意外停机
    • 修补
    • 硬件维护
    • 软件安装
  • 详细说明你做了什么,看到了什么,观察到了什么
  • 将副本发送给责任方并存储为由Search Appliance索引的XML文件。
  • 利润

正如我所说,没有什么幻想。 它使用PERL CGI(被写成十亿年前)和一个用于索引的Google Search设备。

不足之处:

  • 例如,您只需在所有25个域控制器上添加相同的修补程序, 我们没有“域控制器”组,所以我们必须手动将其全部选中
  • 不与硬件,软件或事件日志错误报告集成,以帮助解决问题
  • 相关地,如上所述,为所有“人口统计”数据input人工数据

无论如何,如果毕竟你对代码感兴趣,让我知道,我可以抓住它来分享。

如上所述,它往往是一个文化问题 – 毕竟,一些开发商店不再有评论(自我logging代码是当今stream行的stream行语!),有的使用版本控制系统作为历史logging的圣杯。 显然,这些并不完美。

所以,解决这个问题的唯一方法就是把它作为一个文化解决scheme。 确保所有更改的原因都logging在错误跟踪器(或知识库或维基)中,并确保所有更改都logging在更改控制系统中。

我们有紧急服务客户,系统发生的每一次变化都被logging下来,每次login系统时都要logging下来。 对于他们中的一些人,我们必须先打电话来获得许可(我猜他们也会login)。 logging每一次变更,在不logging的情况下改变客户系统是违纪行为。

这听起来很麻烦,但不是。 你很快就养成了将自己join访问日志和更改日志的习惯 – 在签入代码更改时不必写评论。

我推荐一个bugtracker作为更改控制原因日志,因为它们通常很容易更新(我使用Mantis)。

如果你正在寻找“企业解决scheme”(即你有比上帝更多的钱,并希望有一个非常酷的工具),我曾经支持和提供现场工作的工具,这是它的众多特点之一。

不知道基本定价是什么,但是在惠普收购Opsware之前,这个价格是35万美元(没有支持,相信我 – 当我开始使用Opsware的时候,你需要支持)。

我在那里工作的几个客户使用了与Tripwire结合的应用程序configuration和快照function。

当然,如果你没有预算 – 这是一个不错的select:)

而且,当我重新加载时,这个页面顶部出现的广告是用于调味品的 。 看起来像HPSA强大:)

如果你想要做的只是跟踪变化,而不是pipe理整个过程(即通过厨师或木偶),只需rsync你的etc目录(无论哪里可能)到本地的git仓库。

 for HOST in alpha bravo charlie delta ...; do rsync -avz --exclude-from=exclusions -e ssh admin@$HOST:/opt/local/etc/ ./$HOST done 

当然,您可以根据需要添加其他来源。