systemd-journald 是一个收集并存储各类日志数据的系统服务。 它创建并维护一个带有索引的、结构化的日志数据库, 并可以收集来自各种不同渠道的日志:

在现代的 Linux 系统中,系统日志记录是关键的运维任务之一。为了满足系统管理员对高效、可靠和灵活日志管理的需求,systemd 项目引入了 systemd journal。本篇博客将介绍 systemd journal 的基本概念、工作原理以及如何使用它来管理系统日志。

什么是 systemd journal?

systemd journal 是 systemd 提供的一种高性能日志记录系统。它以二进制格式存储系统日志数据,并提供了强大的查询和分析功能。journal 文件是用来存储这些日志数据的文件。journal 文件的命名通常遵循以下格式:system@<unique-id>.journal。其中,<unique-id> 是一个唯一标识符,用于区分不同的 journal 实例。

systemd journal 的优势

相比传统的文本日志文件,systemd journal 提供了几个重要的优势:

  1. 高性能和效率:journal 以二进制格式存储日志数据,使得写入和读取操作更加高效。它使用索引和数据结构来加速日志查询,提供快速的日志访问速度。
  2. 结构化日志:journal 支持结构化日志记录,允许开发人员在日志消息中添加键值对的元数据。这样可以更容易地解析和分析日志数据,提取有用的信息。
  3. 日志持久化:journal 文件可以持久化存储系统日志,即使在系统重启后仍然可用。这对于故障排除和历史数据分析非常有价值。
  4. 可靠性和完整性:journal 使用写入确认机制,确保日志数据的完整性和可靠性。即使在系统崩溃或断电的情况下,也能保证日志数据的安全。

如何使用 systemd journal

使用 systemd journal 来管理系统日志非常简单。以下是一些常用的命令和操作:

  • 查看实时日志:journalctl -f
  • 根据关键词过滤日志:journalctl -u service-name
  • 按时间范围查询日志:journalctl --since "2022-01-01" --until "2022-01-31"
  • 导出日志到文件:journalctl > logs.txt

通过这些命令,你可以轻松地查看、过滤和导出 systemd journal 中的日志数据。

总结
systemd journal 是一个强大的日志记录系统,为系统管理员和开发人员提供了高效、可靠和灵活的日志管理工具。它以二进制格式存储日志数据,支持结构化日志和持久化存储,具有出色的性能和可靠性。

希望本篇博客能够帮助你了解 systemd journal,并在实际的日志管理中发挥作用。如果你对更深入的系统日志管理和查询技术感兴趣,建议进一步学习和探索 systemd journal 的高级功能和用法。

参考链接:

众所周知,计算机必须有称之为RAM(随机访问内存)的存储器使得计算机工作。RAM指的是插在计算机主板上的物理存储。这里的RAM被用于加载像浏览器、文字处理器这类的程序,实际上,你使用的程序都运行在内存上。

让我们假设你有2GB的内存。当你在运行操作系统时,你的可用内存可能只有1.5GB。接着你使用了大量的程序。当内存使用满之后,你可能再也无法加载更多的程序。浅显地说,计算机可能会说:"抱歉,你不能在运行更多的程序了,如果你还要运行其他的程序请先关闭一些程序。

photo_2024-03-18 19.23.37.jpeg

为了解决这个问题,包括Linux在内的各种操作系统使用了一个称之为虚拟内存的方法。这个方法会搜索最近不在使用的程序的内存区域,接着将它们拷贝到计算机硬盘上。这会腾出一些剩余内存空间给你有机会运行更多的程序。

为了监视虚拟内存的活动,我们使用vmstat工具。

什么是 vmstat

vmstat是一个提供报告虚拟内存统计的工具。它包括了系统内存、交换和实时处理器利用率。

如何运行 vmstat

和mpstat一样,vmstat包含在sysstat包中。如果你还没有,请安装sysstat包。

为了运行vmstat,只需在控制台输入vmstat。不带参数运行vmstat会显示vmstat的默认结果。

photo_2024-03-18 19.25.49.jpeg

让我们看下如何了解vmstat提供的信息:

Procs

procs有 r列和b列。r列代表等待访问CPU的进程数量。而b列意味着睡眠进程的数量。在这些列的下面,是它们的值。从上面的截图中,我门有2个进程正在等待访问CPU,0个睡眠进程。

Memory

memoryswpdfreebuffcache 这些列。这些信息和命令free -m相同。swpd列显示了有多少内存已经被交换到了交换文件或者磁盘。free列显示了未分配的可用内存。buff列显示了使用中的内存。cache列显示了有多少内存可以被交换到交换文件或者磁盘上如果一些应用需要他们。

Swap

swap显示了从交换系统上发送或取回了多少内存。si列告诉我们每秒有多少内存被从swap移到真实内存中(In)。so列告诉我们每秒有多少内存被从真实内存移到swap中(Out)。

I/O

io依据块的读写显示了每秒输入输出的活动。bi列告诉我们收到的块数量,bo列告诉我们发送的块数量。

System

system显示了每秒的系统操作数量。in列显示了系统每秒被中断的数量。cs列显示了系统为了处理所以任务而上下文切换的数量。

CPU

CPU告诉了我们CPU资源的使用情况。us列显示了处理器在非内核程序消耗的时间。sy列显示了处理器在内核相关任务上消耗的时间。id列显示了处理器的空闲时间。wa列显示了处理器在等待IO操作完成以继续处理任务上的时间。

按间隔时间运行vmstat

作为一个统计工具,使用vmstat最好的方法是使用间隔时间。你可以间断地捕捉系统状态。让我假设以5秒的间隔运行vmstat。只需要在你的控制台中输入vmstat 5就行。

photo_2024-03-18 19.27.47.jpeg

命令将会每5秒运行一次,直到你按下Ctrl-C来终止它。你也可以使用第二个参数来控制vmstat运行的次数。

photo_2024-03-18 19.28.28.jpeg

上面的命令会以5秒的间隔运行7次vmstat

显示活跃和非活跃内存

要这么做,你可以在vmstat后加入-a选项。这是个示例。

photo_2024-03-18 19.29.34.jpeg

显示磁盘统计数据总结

如果你想,vmstat也可以打印系统磁盘活动统计。使用-D选项就行。

photo_2024-03-18 19.30.53.jpeg

显示单位

你可以选择你想打印的显示单位字符。在-S后跟上k (小写,1000)、 K (大写,1024)、 m (小写,1000000)、 M (大写,1048576) 字节. 如果你不想选择单位,默认使用的是K (1024)。

photo_2024-03-18 19.33.44.jpeg

显示某个磁盘分区的详细统计数据

要这么做,你可以使用-p选项跟上设备名。这里有个例子。

photo_2024-03-18 19.34.22.jpeg

文件

vmstat实际上是使用这些文件获取的数据。

/proc/meminfo
/proc/stat
/proc/*/stat 

总结

如果你感觉系统运行超出内存了,在你增加物理内存前,这个工具可以帮助你确定问题的根本原因。通常上,你可以在控制台中输入man vmstat获取更多的关于vmstat的详细信息,这会为你显示vmstat的手册页。

非常抱歉,似乎在转换成 Markdown 格式时出现了问题。以下是使用 iftop 监控网络流量的修正版技术博客:


使用 iftop 监控网络流量

在网络管理和故障排除中,监控网络流量是一项重要的任务。iftop 是一个开源的命令行工具,可以实时显示网络接口的流量信息。本篇博客将介绍如何使用 iftop 来监控网络流量。

什么是 iftop?

iftop 是一个基于终端的实时网络流量监控工具,它可以显示网络接口的实时流量信息,包括源IP地址、目标IP地址、端口和传输速率等。通过 iftop,您可以了解网络中的数据流向和流量分布情况。

安装 iftop

在开始使用 iftop 之前,需要先安装它。以下是在常见 Linux 发行版上安装 iftop 的命令:

  • Ubuntu/Debian:
sudo apt-get install iftop
  • CentOS/Fedora:
sudo yum install iftop

使用 iftop 监控网络流量

安装完成后,可以按照以下步骤使用 iftop 监控网络流量:

  1. 打开终端。
  2. 运行以下命令启动 iftop:
sudo iftop

如果您使用的是非特权用户,请确保以管理员权限运行命令。

  1. iftop 将显示默认网络接口的流量信息,包括源IP、目标IP、端口和传输速率。

    ![iftop][]

    在界面上,您可以看到实时的流量信息,并且可以按需排序和过滤数据。

  2. 您可以使用 iftop 的一些命令行选项来自定义输出。例如,以下命令将显示指定网络接口的流量信息:

    bashsudo iftop -i eth0

    替换 eth0 为您要监控的网络接口。

结论

通过使用 iftop,您可以方便地监控网络接口的实时流量信息。它提供了有用的数据,帮助您分析网络流量和定位潜在的问题。无论是在网络管理、故障排除还是性能优化方面,

iftop 都是一个强大而实用的工具。希望本篇技术博客对您有所帮助!

引用文献

如何在Linux Shell中读取WebSocket响应

curl 请求的方式 不在有效 经常抛错

curl 'wss://ws.test.com' -H 'Upgrade: websocket' -H 'Connection: Upgrade' --verbose
* Protocol "wss" not supported or disabled in libcurl
* Closing connection -1
curl: (1) Protocol "wss" not supported or disabled in libcurl

更换使用 wscat

npm install -g wscat
/usr/bin/wscat -> /usr/lib/node_modules/wscat/bin/wscat
npm WARN notsup Unsupported engine for commander@9.5.0: wanted: {"node":"^12.20.0 || >=14"} (current: {"node":"8.17.0","npm":"6.13.4"})
npm WARN notsup Not compatible with your version of node/npm: commander@9.5.0
npm WARN notsup Unsupported engine for ws@8.16.0: wanted: {"node":">=10.0.0"} (current: {"node":"8.17.0","npm":"6.13.4"})
npm WARN notsup Not compatible with your version of node/npm: ws@8.16.0

+ wscat@5.2.0
added 9 packages from 7 contributors in 1.264s

指令测试

wscat -c 'wss://ws.test.com'
Connected (press CTRL+C to quit)

起码可以测试下 websocket 是否握手成功

karp

创建我自己的巨人