蚊章汇 - Peter Czanik
type: channel
link: https://linuxcn.bwsl.wang/author/932/
description: Peter Czanik
items: 什么是开源布道师？
items: 2022 年 5 个新 sudo 功能
items: 把你的树莓派变成一个 HiFi 音乐系统
items: 2020 年 5 个新 sudo 功能
items: 关于 sudo 你可能不知道的
items: 使用 syslog-ng 可靠地记录物联网事件
items: 为什么我喜欢 ARM 和 PowerPC？

什么是开源布道师？
type: item
date: 2023-04-25T17:09:11+08:00
description: 了解如何成为产品用户和开发人员之间的桥梁。当人们得知我是位（专注于 syslog-ng 和 sudo 的）开源布道师的时候，他们经常问我为 Linux 世界中如此知名的软件“代言”是什么感觉。我的回答非常简短：非常棒！我是整个研发环节的一部分，所以我不会觉得自己可有可无。当人们实践我教他们的东西，以及当我收集到的用户反馈影响产品开发的时候，我感觉我很有意义。什么是布道师？我将布道师定义为软件（或其他产品）的用户和开发人员之间的桥梁。布道师不仅仅将好消息分享给用户，还要从他们那里收集反馈。布道师们有着各式各样的背景：有些人具有市场营销背景，对技术有着浓厚的兴趣；有些人是喜欢和用户交流的开发人员。我属于第三类——“资深用户”，即从用户视角对软件产品有深入了解的人。我要和非常多的用户打交道。syslog-ng 的用户群体非常庞大，它可以用在大多数 Linux 发行版和 BSD 变体上。数以亿计的设备运行着 syslog-ng，其中包括 BMW i3 和 Kindle。大多数基于 BSD 的设备，譬如 FreeNAS，使用 syslog-ng 记录日志，而 Synology 和 QNAP 的基于 Linux 的 网络附属存储 Network Attached Storage （NAS）也是如此。就算 syslog-ng 运行在太空的某处，我也不会感到惊讶。大多数 Linux 和 Unix 用户使用 sudo，因为它几乎被安装在每一台 Linux 设备上。它的社区很大，有几千万人。人们经常问我是如何和那么多用户打交道的，但这并不困难。我是如何成为一名布道师的我成为布道师的旅程是一个跨越了近 20 年的进化过程。它始于许多年前，那时候我在大学教书。之后是和 POWER/PowerPC 的 Linux 用户、开发人员合作。最后，我在 Balabit 的工作中开始使用 syslog-ng，再后来我开始接触 sudo。我在 Balabit 的第一份工作是帮助 Linux 发行版将它们的 syslog-ng 包升级到上游的最新版本。随着我越来越多地了解 syslog-ng 的细节，我开始帮助它的用户。一年后，我在匈牙利和国际会议上发表关于 syslog-ng 的演说。不久之后，我从用户那里收集到的反馈开始对产品开发产生影响。八年后，也就是 2018 年，Balabit 被 One Identity 收购，sudo 的维护者 Todd Miller 成为了我的同事。在那之前我只是了解一些基本的 sudo 功能，但我变得对 sudo 更感兴趣，并开始了解它的高级功能。很快，我开始为 sudo 布道，从一名 syslog-ng 布道师进化为一个更广泛意义上的开源布道师。技术布道的四大支柱技术布道师做很多事情，大致可以分为四类：开发人员、支持人员、技术产品营销和产品经理。我将更详细地介绍这四个支柱。开发人员我不是开发人员，但我做了很多开发人员的工作，例如为各式各样的 Linux 发行版和 FreeBSD 打包 syslog-ng，做很多测试，将 syslog-ng 集成到其他软件中，并在异构平台上测试。我做的开发者任务有助于社区，并帮助我更好地了解社区需求。支持人员关注错误追踪器，在 Google Alerts 和 Twitter 上查看 syslog-ng 关键词，以及阅读邮件列表，都能让我更好地帮助我们的用户群体。通过帮助他人，我也能能更好地理解他们的问题所在。技术产品营销我真的不喜欢“营销”这个词，但是写博客和在会议上演说 确实是 营销。作为一名前系统管理员，我了解我的听众，我们有共同的声音。除了我自己的 Twitter 账号 @PCzanik 之外，我还在 @sngOSE （syslog-ng 开源版）和 @SudoProject （sudo）账号下发帖。Twitter 是个收集和分享技术新闻的绝佳平台。即使营销只是我工作的一个方面，它仍是我布道工作中最引人注目的部分：给内向者的社交场合生存技巧： 当人们得知我是一个内向的人，而仍然从事了这份工作之后，就经常问我是如何做到的。发表演讲或在会议展位上工作一整天是很困难的：有太多的人、太多的噪音了。我在这里针对这种场合给出一些生存技巧：专注于结果。活动是从用户那里收集反馈的绝佳机会。等你演讲完，可以随地开始一场好的讨论，甚至在展台或走廊上。在活动中，用户会给出很多现实生活中的反馈，记住她们的意见会有很多帮助。知道活动何时结束。请记住在嘈杂的环境中只能待上一段时间，这对你会有很大的帮助。与你志同道合的人尽情交谈，他们和你一样害羞、和你一样有不安全感、和你有着相同的技术兴趣。疫情期间的营销技巧： 许多人问我 COVID-19 是如何影响我的工作的，因为我从 2020 年开始就不能出行。我刚从 RSA 大会…

2022 年 5 个新 sudo 功能
type: item
date: 2022-02-24T20:42:00+08:00
description: 最近的 sudo 版本增加了新的功能，使你能够观察和控制以前隐藏的问题。当你想授予你的一些用户管理权限，同时控制和检查他们在你的系统上做什么时，你会使用 sudo。然而，即使是 sudo'，也有相当多不可控的地方，想想给予 shell 权限的情况就知道了。最近的 sudo 版本增加了一些功能，可以让你看到这些问题，甚至控制它们。例如，你可以启用更详细、更容易处理的日志信息，并记录 shell 会话中执行的每个命令。这些功能中有些是全新的。有些是出现在 1.9.0 甚至更早的版本中的功能。例如，sudo 可以记录终端上发生的一切，即使是在 1.8 版本。然而，系统将这些记录保存在本地，它们很容易被删除，特别是那些记录最有用的地方：Shell 会话。1.9.0 版本增加了会话记录集中收集，因此记录不能被本地用户删除，最近的版本还增加了中继功能，使收集功能更加强大。如果你只知道 sudo 的基础知识，或者以前只使用过 1.8 版本，我建议你阅读我以前的 文章。1、JSON 格式的日志记录我想介绍的第一个新功能是 JSON 格式的日志记录。我是一个日志狂热者（12 年前我就开始在 syslog-ng 项目上工作），而这个功能是我在这里发表文章后引入的第一个功能。启用后，sudo 记录了更多的信息，并且以一种更容易解析的方式进行。传统的 syslog 信息很短，只包含最小的必要信息量。这是由于旧的 syslog 实现的限制。超过 1k 大小的信息被丢弃或截断。Jan 28 13:56:27 localhost.localdomain sudo[10419]: czanik : TTY=pts/0 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/bash 最近的 syslog 实现可以处理更大的信息量。syslog-ng 默认接受 64k 大小的日志信息（当然，它可以更小或更大，取决于实际配置）。同样的事件，如果以 JSON 格式记录，就会包含更多的信息。更多并不意味着更难处理。JSON 格式的信息更容易被许多日志管理软件应用解析。下面是一个例子：Jan 28 13:58:20 localhost.localdomain sudo[10518]: @cee:{"sudo":{"accept":{"uuid":"616bc9efcf-b239-469d-60ee-deb5af8ce6","server_time":{"seconds":1643374700,"nanoseconds":222446715,"iso8601":"20220128125820Z","localtime":"Jan 28 13:58:20"},"submit_time":{"seconds":1643374700,"nanoseconds":209935349,"iso8601":"20220128125820Z","localtime":"Jan 28 13:58:20"},"submituser":"czanik","command":"/bin/bash","runuser":"root","runcwd":"/home/czanik","ttyname":"/dev/pts/0","submithost":"localhost.localdomain","submitcwd":"/home/czanik","runuid":0,"columns":118,"lines":60,"runargv":["/bin/bash"],"runenv":["LANG=en_US.UTF-8","HOSTNAME=localhost.localdomain","SHELL=/bin/bash","TERM=xterm-256color","PATH=/home/czanik/.local/bin:/home/czanik/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin","MAIL=/var/mail/root","LOGNAME=root","USER=root","HOME=/root","SUDO_COMMAND=/bin/bash","SUDO_USER=czanik","SUDO_UID=1000","SUDO_GID=1000"]}}} 你可以在 sudoers 文件中启用 JSON 格式的日志信息：Defaults log_format=json 你可以从我的 syslog-ng 博客中了解更多关于如何从 sudo 中使用 JSON 格式的日志信息。2、使用 sudo\_logsrvd 集中收集日志1.9.4 中另一个与日志相关的功能是使用 sudo_l…

把你的树莓派变成一个 HiFi 音乐系统
type: item
date: 2021-03-17T17:48:30+08:00
description: 为你的朋友、家人、同事或其他任何拥有廉价发烧设备的人播放音乐。在过去的 10 年里，我大部分时间都是远程工作，但当我走进办公室时，我坐在一个充满内向的同伴的房间里，他们很容易被环境噪音和谈话所干扰。我们发现，听音乐可以抑制办公室的噪音，让声音不那么扰人，用愉快的音乐提供一个愉快的工作环境。起初，我们的一位同事带来了一些老式的有源电脑音箱，把它们连接到他的桌面电脑上，然后问我们想听什么。它可以工作，但音质不是很好，而且只有当他在办公室的时候才可以使用。接下来，我们又买了一对 Altec Lansing 音箱。音质有所改善，但没有什么灵活性。不久之后，我们得到了一台通用 ARM 单板计算机（SBC），这意味着任何人都可以通过 Web 界面控制播放列表和音箱。但一块普通的 ARM 开发板意味着我们不能使用流行的音乐设备软件。由于非标准的内核，更新操作系统是一件很痛苦的事情，而且 Web 界面也经常出现故障。当团队壮大并搬进更大的房间后，我们开始梦想着有更好音箱和更容易处理软件和硬件组合的方法。为了用一种相对便宜、灵活、音质好的方式解决我们的问题，我们用树莓派、音箱和开源软件开发了一个办公室 HiFi。HiFi 硬件用一个专门的 PC 来播放背景音乐就有点过分了。它昂贵、嘈杂（除非是静音的，但那就更贵了），而且不环保。即使是最便宜的 ARM 板也能胜任这个工作，但从软件的角度来看，它们往往存在问题。树莓派还是比较便宜的，虽然不是标准的计算机，但在硬件和软件方面都有很好的支持。接下来的问题是：用什么音箱。质量好的、有源的音箱很贵。无源音箱的成本较低，但需要一个功放，这需要为这套设备增加另一个盒子。它们还必须使用树莓派的音频输出；虽然可以工作，但并不是最好的，特别是当你已经在高质量的音箱和功放上投入资金的时候。幸运的是，在数以千计的树莓派硬件扩展中，有内置数字模拟转换器（DAC）的功放。我们选择了 HiFiBerry 的 Amp。它在我们买来后不久就停产了（被采样率更好的 Amp+ 型号取代），但对于我们的目的来说，它已经足够好了。在开着空调的情况下，我想无论如何你也听不出 48kHz 或 192kHz 的 DAC 有什么不同。音箱方面，我们选择了 Audioengine P4，是在某店家清仓大甩卖的时候买的，价格超低。它很容易让我们的办公室房间充满了声音而不失真（并且还能传到我们的房间之外，有一些失真，隔壁的工程师往往不喜欢）。HiFi 软件在我们旧的通用 ARM SBC 上我们需要维护一个 Ubuntu，使用一个固定的、古老的、在软件包仓库外的系统内核，这是有问题的。树莓派操作系统包括一个维护良好的内核包，使其成为一个稳定且易于更新的基础系统，但它仍然需要我们定期更新 Python 脚本来访问 Spotify 和 YouTube。对于我们的目的来说，这有点过于高维护。幸运的是，使用树莓派作为基础意味着有许多现成的软件设备可用。我们选择了 Volumio，这是一个将树莓派变成音乐播放设备的开源项目。安装是一个简单的一步步完成的过程。安装和升级是完全无痛的，而不用辛辛苦苦地安装和维护一个操作系统，并定期调试破损的 Python 代码。配置 HiFiBerry 功放不需要编辑任何配置文件，你只需要从列表中选择即可。当然，习惯新的用户界面需要一定的时间，但稳定性和维护的便捷性让这个改变是值得的。播放音乐并体验虽然大流行期间我们都在家里办公，不过我把办公室的 HiFi 安装在我的家庭办公室里，这意味着我可以自由支配它的运行。一个不断变化的用户界面对于一个团队来说会很痛苦，但对于一个有研发背景的人来说，自己玩一个设备，变化是很有趣的。我不是一个程序员，但我有很强的 Linux 和 Unix 系统管理背景。这意味着，虽然我觉得修复坏掉的 Python 代码很烦人，但 Volumio 对我来说却足够完美，足够无聊（这是一个很好的“问题”）。幸运的是，在树莓派上播放音乐还有很多其他的可能性。作为一个终端狂人（我甚至从终端窗口启动 LibreOffice），我主要使用 Music on Console（MOC）来播放我的网络存储（NAS）中的音乐。我有几百张 CD，都转换成了 FLAC 文件。而且我还从 BandCamp 或 Society of Sound 等渠道购买了许多数字专辑。另一个选择是 音乐播放器守护进程（MPD）。把它运行在树莓派上，我可以通过网络使用 Linux 和 Android 的众多客户端之一与我的音乐进行远程交互。音乐不停歇正如你所看到的，创建一个廉价的 HiFi 系统在软件和硬件方面几乎是无限可能的。我们的解决方案只是众多解决方案中的一个，我希望它能启发你建立适合你环境的东西。via: https://opensource.co…

2020 年 5 个新 sudo 功能
type: item
date: 2020-11-28T22:36:00+08:00
description: 从集中会话记录、chroot 支持到 Python API，sudo 1.9 提供了许多新功能。当你想在 POSIX 系统上执行一个操作时，最安全的方法之一就是使用 sudo 命令。与以 root 用户身份登录并执行命令可能是个危险的操作不同，sudo 授予任何被系统管理员指定为 “sudoer”的用户临时权限，来执行通常受限制的活动。几十年来，这个系统帮助 Linux、Unix 和 macOS 系统免受愚蠢的错误和恶意攻击，它是当今所有主要 Linux 发行版的默认管理机制。当在 2020 年 5 月发布 sudo 1.9 时，它带来了许多新功能，包括集中收集会话记录，支持 sudo 内的 chroot，以及 Python API。如果你对其中的任何一项感到惊讶，请阅读我的文章，了解一些 sudo 鲜为人知的功能。sudo 不仅仅是一个管理命令的前缀。你可以微调权限，记录终端上发生的事情，使用插件扩展sudo，在 LDAP 中存储配置，进行广泛的日志记录，以及更多。1.9.0 版本和后续的小版本增加了各种新功能（我将在下面介绍），包括：一个集中收集 sudo 会话记录的记录服务审计插件 API审批插件 APIPython 对插件的支持sudo 内置 chroot 和 CWD 支持（从 1.9.3 开始）哪里可以得到 sudo 1.9？大多数的 Linux 发行版仍然封装了上一代的 sudo（1.8 版本），并且在长期支持（LTS）的发行版中会保持这个版本数年。据我所知，提供了最完整的 sudo 1.9 包的 Linux 发行版是 openSUSETumbleweed，它是一个滚动发行版，而且该 sudo 包的子包中有 Python 支持。最近的 Fedora 版本包含了 sudo 1.9，但没有 Python 支持。FreeBSD Ports 有最新的 sudo 版本，如果你自己编译 sudo 而不是使用软件包，你可以启用 Python 支持。如果你喜欢的 Linux 发行版还没有包含 sudo 1.9，请查看 sudo 二进制页面来查看是否有现成的包可以用于你的系统。这个页面还提供了一些商用 Unix 变种的软件包。像往常一样，在你开始试验 sudo 设置之前，确保你知道 root 密码。是的，即使在 Ubuntu 上也是如此。有一个临时的“后门”是很重要的；如果没有这个后门，如果出了问题，你就必须得黑掉自己的系统。记住：语法正确的配置并不意味着每个人都可以在该系统上通过 sudo 做任何事情！记录服务记录服务可以集中收集会话记录。与本地会话记录存储相比，这有很多优势：更方便地在一个地方进行搜索，而不是访问各个机器来寻找记录即使在发送机器停机的情况下也可以进行记录本地用户若想掩盖其轨迹，不能删除记录为了快速测试，你可以通过非加密连接向记录服务发送会话。我的博客中包含了说明，可以在几分钟内完成设置。对于生产环境，我建议使用加密连接。有很多可能性，所以请阅读最适合你的环境的文档。审计插件 API新的审计插件 API 不是一个用户可见的功能。换句话说，你不能从 sudoers 文件中配置它。它是一个 API，意味着你可以从插件中访问审计信息，包括用 Python 编写的插件。你可以用很多不同的方式来使用它，比如当一些有趣的事情发生时，从 sudo 直接发送事件到 Elasticsearch 或日志即服务（LaaS）上。你也可以用它来进行调试，并以任何你喜欢的格式将其他难以访问的信息打印到屏幕上。根据你使用它的方式，你可以在 sudo 插件手册页（针对 C 语言）和 sudo Python 插件手册中找到它的文档。在 sudo 源代码中可以找到 Python 代码示例，在我的博客上也有一个简化的例子。审批插件 API审批插件 API 可以在命令执行之前加入额外的限制。这些限制只有在策略插件成功后才会运行，因此你可以有效地添加额外的策略层，而无需更换策略插件，进而无需更换 sudoers。可以定义多个审批插件，而且所有插件都必须成功，命令才能执行。与审计插件 API 一样，你可以从 C 和 Python 中使用它。我博客上记录的示例 Python 代码是对该 API 的一个很好的介绍。一旦你理解了它是如何工作的，你就可以扩展它来将 sudo 连接到工单系统，并且只批准有相关开放工单的会话。你也可以连接到人力资源数据库，这样只有当班的工程师才能获得管理权限。Python 对插件的支持尽管我不是程序员，但我最喜欢的 sudo 1.9 新特性是 Python 对插件的支持。你可以用 Python 也能使用 C 语言调用大部分 API。幸运的是，sudo 对性能不敏感，所以运行速度相对较慢的 Python 代码对 sudo 来说不是问题。使…

关于 sudo 你可能不知道的
type: item
date: 2019-11-20T17:18:37+08:00
description: 觉得你已经了解了 sudo 的所有知识了吗？再想想。大家都知道 sudo，对吗？默认情况下，该工具已安装在大多数 Linux 系统上，并且可用于大多数 BSD 和商业 Unix 变体。不过，在与数百名 sudo 用户交谈之后，我得到的最常见的答案是 sudo 是一个使生活复杂化的工具。有 root 用户和 su 命令，那么为什么还要使用另一个工具呢？对于许多人来说，sudo 只是管理命令的前缀。只有极少数人提到，当你在同一个系统上有多个管理员时，可以使用 sudo 日志查看谁做了什么。那么，sudo 是什么？ 根据 sudo 网站：“sudo 允许系统管理员通过授予某些用户以 root 用户或其他用户身份运行某些命令的能力，同时提供命令及其参数的审核记录，从而委派权限。”默认情况下，sudo 只有简单的配置，一条规则允许一个用户或一组用户执行几乎所有操作（在本文后面的配置文件中有更多信息）：%wheel ALL=(ALL) ALL在此示例中，参数表示以下含义：第一个参数（%wheel）定义组的成员。第二个参数（ALL）定义组成员可以在其上运行命令的主机。第三个参数（(ALL)）定义了可以执行命令的用户名。最后一个参数（ALL）定义可以运行的应用程序。因此，在此示例中，wheel 组的成员可以以所有主机上的所有用户身份运行所有应用程序。但即使是这个一切允许的规则也很有用，因为它会记录谁在计算机上做了什么。别名当然，它不仅可以让你和你最好的朋友管理一个共享机器，你还可以微调权限。你可以将以上配置中的项目替换为列表：用户列表、命令列表等。多数情况下，你可能会复制并粘贴配置中的一些列表。在这种情况下，别名可以派上用场。在多个位置维护相同的列表容易出错。你可以定义一次别名，然后可以多次使用。因此，当你对一位管理员不再信任时，将其从别名中删除就行了。使用多个列表而不是别名，很容易忘记从具有较高特权的列表之一中删除用户。为特定组的用户启用功能sudo 命令带有大量默认设置。不过，在某些情况下，你想覆盖其中的一些情况，这时你可以在配置中使用 Defaults 语句。通常，对每个用户都强制使用这些默认值，但是你可以根据主机、用户名等将设置缩小到一部分用户。这里有个我那一代的系统管理员都喜欢玩的一个示例：“羞辱”。这些只不过是一些有人输入错误密码时的有趣信息：czanik@linux-mewy:~> sudo ls [sudo] password for root: Hold it up to the light --- not a brain in sight! # 把灯举高点，脑仁太小看不到 [sudo] password for root: My pet ferret can type better than you! # 我的宠物貂也比你输入的好 [sudo] password for root: sudo: 3 incorrect password attempts czanik@linux-mewy:~>由于并非所有人都喜欢系统管理员的这种幽默，因此默认情况下会禁用这些羞辱信息。以下示例说明了如何仅对经验丰富的系统管理员（即 wheel 组的成员）启用此设置：Defaults !insults Defaults:%wheel insults我想，感谢我将这些消息带回来的人用两只手也数不过来吧。摘要验证当然，sudo 还有更严肃的功能。其中之一是摘要验证。你可以在配置中包括应用程序的摘要：peter ALL = sha244:11925141bb22866afdf257ce7790bd6275feda80b3b241c108b79c88 /usr/bin/passwd在这种情况下，sudo 在运行应用程序之前检查应用程序摘要，并将其与配置中存储的摘要进行比较。如果不匹配，sudo 拒绝运行该应用程序。尽管很难在配置中维护此信息（没有用于此目的的自动化工具），但是这些摘要可以为你提供额外的保护层。会话记录会话记录也是 sudo 鲜为人知的功能。在演示之后，许多人离开我的演讲后就计划在其基础设施上实施它。为什么？因为使用会话记录，你不仅可以看到命令名称，还可以看到终端中发生的所有事情。你可以看到你的管理员在做什么，要不他们用 shell 访问了机器而日志仅会显示启动了 bash。当前有一个限制。记录存储在本地，因此具有足够的权限的话，用户可以删除他们的痕迹。所以请继续关注即将推出的功能。插件从 1.8 版开始，sudo 更改为基于插件的模块化体系结构。通过将大多数功能实现为插件，你可以编写自己的功能轻松地替换或扩展 sudo 的功能。已经有了 sudo 上的开源和商业插件。在我的演讲中，我演示了 sudo_pair 插件，该插件可在 Git…

使用 syslog-ng 可靠地记录物联网事件
type: item
date: 2018-05-17T17:48:59+08:00
description: 用增强的日志守护进程 syslog-ng 来监控你的物联网设备。现在，物联网设备和嵌入式系统越来越多。对于许多连接到因特网或者一个网络的设备来说，记录事件很有必要，因为你需要知道这些设备都做了些什么事情，这样你才能够解决可能出现的问题。可以考虑去使用的一个监视工具是开源的 syslog-ng 应用程序，它是一个强化的、致力于可移植的、中心化的日志收集守护程序。它可以从许多不同种类的来源、进程来收集日志，并且可以对这些日志进行处理和过滤，也可以存储或者路由它们，以便于做进一步的分析。syslog-ng 的大多数代码是用高效率的、高可移植的 C 代码写成的。它能够适用于各种场景，无论你是将它运行在一个处理能力很弱的设备上做一些简单的事情，还是运行在数据中心从成千上万的机器中收集日志的强大应用，它都能够胜任。你可能注意到在这个段落中，我使用了大量的溢美词汇。为了让你更清晰地了解它，我们来复习一下，但这将花费更多的时间，也了解的更深入一些。日志首先解释一下日志。 日志 logging 是记录一台计算机上事件的东西。在一个典型的 Linux 机器上，你可以在 /var/log 目录中找到这些信息。例如，如果你通过 SSH 登录到机器中，你将可以在其中一个日志文件中找到类似于如下内容的信息：Jan 14 11:38:48 linux-0jbu sshd[7716]: Accepted publickey for root from 127.0.0.1 port 48806 ssh2 日志的内容可能是关于你的 CPU 过热、通过 HTTP 下载了一个文档，或者你的应用程序认为重要的任何东西。syslog-ng正如我在上面所写的那样，syslog-ng 应用程序是一个强化的、致力于可移植性、和中心化的日志收集守护程序。守护程序的意思是，syslog-ng 是一个持续运行在后台的应用程序，在这里，它用于收集日志信息。虽然现在大多数应用程序的 Linux 测试是限制在 x86\_64 的机器上，但是，syslog-ng 也可以运行在大多数 BSD 和商业 UNIX 变种版本上的。从嵌入式/物联网的角度来看，这种能够运行在不同的 CPU 架构（包括 32 位和 64 位的 ARM、PowerPC、MIPS 等等）的能力甚至更为重要。（有时候，我通过阅读关于 syslog-ng 是如何使用它们的来学习新架构）为什么中心化的日志收集如此重要？其中一个很重要的原因是易于使用，因为它放在一个地方，不用到成百上千的机器上挨个去检查它们的日志。另一个原因是可用性 —— 即使一个设备不论是什么原因导致了它不可用，你都可以检查这个设备的日志信息。第三个原因是安全性；当你的设备被黑，检查设备日志可以发现攻击的踪迹。syslog-ng 的四种用法syslog-ng 有四种主要的用法：收集、处理、过滤、和保存日志信息。收集信息： syslog-ng 能够从各种各样的 特定平台源 上收集信息，比如 /dev/log，journal，或者 sun-streams。作为一个中心化的日志收集器，传统的（rfc3164）和最新的（rfc5424）系统日志协议、以及它们基于 UDP、TCP 和加密连接的各种变种，它都是支持的。你也可以从管道、套接字、文件、甚至应用程序输出来收集日志信息（或者各种文本数据）。处理日志信息： 它的处理能力几乎是无限的。你可以用它内置的解析器来分类、规范，以及结构化日志信息。如果它没有为你提供在你的应用场景中所需要的解析器，你甚至可以用 Python 来自己写一个解析器。你也可以使用地理数据来丰富信息，或者基于信息内容来附加一些字段。日志信息可以按处理它的应用程序所要求的格式进行重新格式化。你也可以重写日志信息 —— 当然了，不是篡改日志内容 —— 比如在某些情况下，需要满足匿名要求的信息。过滤日志： 过滤日志的用法主要有两种：丢弃不需要保存的日志信息 —— 像调试级别的信息；和路由日志信息—— 确保正确的日志到达正确的目的地。后一种用法的一个例子是，转发所有的认证相关的信息到一个安全信息与事件管理系统（SIEM）。保存信息： 传统的做法是，将文件保存在本地或者发送到中心化日志服务器；不论是哪种方式，它们都被发送到一个普通文件。经过这些年的改进，syslog-ng 已经开始支持 SQL 数据库，并且在过去的几年里，包括 HDFS、Kafka、MongoDB、和 Elasticsearch 在内的大数据存储，都被加入到 syslog-ng 的支持中。消息格式当在你的 /var/log 目录中查看消息时，你将看到（如上面的 SSH 信息）大量的消息都是如下格式的内容：日期 + 主机名 + 应用名 + 一句几乎完整的英文信息 在这里的每个应用程序事件都是用不同…

为什么我喜欢 ARM 和 PowerPC？
type: item
date: 2018-05-08T06:56:19+08:00
description: 一个学生在搜寻强劲而节能的工作站的历程中怎样对开源系统的热情与日俱增的。最近我被问起为什么在博客和推特里经常提到 ARM 和 PowerPC。我有两个答案：一个是个人原因，另一个是技术上的。个人原因从前，我是学环境保护的。在我读博的时候，我准备买个新电脑。作为一个环保人士，我需要一台强劲且节能的电脑。这就是我开始对 PowerPC 感兴趣的原因，我找到了 Pegasos，这是一台 Genesi 公司制造的 PowerPC 工作站。我还用过 RS/6000 （PowerPC）、 SGI （MIPS）、 HP-UX （PA-RISC）和 VMS （Alpha）的服务器和工作站，由于我的 PC 使用 Linux 而非 Windows，所以使用不同的 CPU 架构对我来说并没有什么区别。 Pegasos 是我第一台工作站，它小型而节能而且对家用来说性能足够。很快我就开始为 Genesi 工作，为 Pegasos 移植 openSUSE、 Ubuntu 和其他 Linux 发行版，并提供质量保证和社区支持。继 Pegasos 之后是 EFIKA，这是另一款基于 PowerPC 的开发板。在用过工作站之后，刚开始使用嵌入式系统会感觉有点奇怪。但是作为第一代普及价位的开发板，这是一场革命的开端。我工作于一个大规模的服务器项目时，我收到 Genesi 的另一块有趣的开发板：基于 ARM 的 Smarttop 和 Smartbook。我最喜欢的 Linux 发行版——openSUSE，也收到了一打这种机器。这在当时 ARM 电脑非常稀缺的情况下，极大地促进了 ARM 版 openSUSE 项目的开发。尽管最近我很忙，我尽量保持对 ARM 和 PowerPC 新闻的关注。这有助于我支持非 x86 平台上的 syslog-ng 用户。只要有半个小时的空，我就会去捣鼓一下 ARM 机器。我在树莓派2上做了很多 syslog-ng 的测试，结果令人振奋。我最近在树莓派上做了个音乐播放器，用了一块 USB 声卡和音乐播放守护进程，我经常使用它。技术方面美好的多样性：它创造了竞争，而竞争创造了更好的产品。虽然 x86 是一款强劲的通用处理器，但 ARM 和 PowerPC （以及许多其他）这样的芯片在多种特定场景下显得更适合。如果你有一部运行安卓的移动设备或者苹果的 iPhone 或 iPad，极有可能它使用的就是基于ARM 的 SoC (片上系统)。网络存储服务器也一样。原因很简单：省电。你不会希望手机一直在充电，也不想为你的路由器付更多的电费。ARM 亦在使用 64 位 ARMv8 芯片征战企业级服务器市场。很多任务只需要极少的计算能力，另一方面省电和快速 IO 才是关键，想想存储、静态网页服务器、电子邮件和其他网络/存储相关的功能。一个最好的例子就是 Ceph，一个分布式的面向对象文件系统。SoftIron 就是一个基于 ARMv8 开发版，使用 CentOS 作为基准软件，运行在 Ceph 上的完整存储应用。众所周知 PowerPC 是旧版苹果 Mac 电脑上的 CPU。虽然它不再作为通用桌面电脑的 CPU ，它依然在路由器和电信设备里发挥作用。而且 IBM 仍在为高端服务器制造芯片。几年前，随着 Power8 的引入， IBM 在 OpenPower 基金会 的支持下开放了架构。 Power8 对于关心内存带宽的设备，比如 HPC 、大数据、数据挖掘来说，是非常理想的平台。目前，Power9 也正呼之欲出。这些都是服务器应用，但也有计划用于终端用户。猛禽工程团队正在开发一款基于 Power9 的工作站，也有一个基于飞思卡尔/恩智浦 QORIQ E6500 芯片制造笔记本的倡议。当然，这些电脑并不适合所有人，你不能在它们上面安装 Windows 游戏或者商业应用。但它们对于 PowerPC 开发人员和爱好者，或者任何想要完全开放系统的人来说是理想的选择，因为从硬件到固件到应用程序都是开放的。梦想我的梦想是完全没有 x86 的环境，不是因为我讨厌 x86 ，而是因为我喜欢多样化而且总是希望使用最适合工作的工具。如果你看看猛禽工程网页上的图，根据不同的使用情景， ARM 和 POWER 完全可以代替 x86 。现在，我在笔记本的 x86 虚拟机上编译、打包和测试 syslog-ng。如果能用上足够强劲的 ARMv8 或者 PowerPC 电脑，无论工作站还是服务器，我就能避免在 x86 上做这些事。现在我正在等待下一代菠萝本的到来，就像我在二月份 FOSDEM 上说的，下一代有望提供更高的性能。和 Chrome 本不同的是，这个 ARM 笔记本设计用于运行 Linux 而非仅是个客户端（LCTT 译注：Chrome 笔记本只提供基于网页的应用）。作为桌…