标签 监控 下的文章

作为一位 Linux 管理员,你需要跟踪所有用户的活动。当服务器发生故障时,你可以分析和查看用户活动,以便寻找问题的根源。监控 Linux 用户有多种方式。本指南将专门讨论 GNU 记账工具,这是一项用于监视 Linux 用户活动的实用工具。

什么是记账工具?

记账工具可以提供诸如 Linux 系统中的连接、已执行的程序以及系统资源的使用等有底系统使用信息。这些记账工具可以通过 psacctacct 软件包安装。

psacctacct 实际上是相同的。在基于 RPM 的系统中,它以 psacct 的形式存在;而在基于 DEB 的系统中,它作为 acct 提供。

你可能想知道 psacctacct 工具的作用。通常,用户在命令行的历史记录会保存在他们的 $HOME 目录下的 .bash_history 文件中。有些用户可能会尝试编辑、修改或删除这些历史记录。

然而,即使他们完全 清除了命令行历史,记账工具依然能够获取用户活动信息。这是因为,所有进程记账文件都由 root 用户拥有,而普通用户则无法进行编辑。

Linux 中如何安装 psacct 或 acct

psacct/acct 被打包在多种流行的 Linux 发行版本中。

如果要在 Alpine Linux 中安装 psacct,请运行以下命令:

$ sudo apk add psacct

如果在 Arch Linux 及其变体版本(如 EndeavourOS 和 Manjaro Linux)中安装 acct,请运行以下命令:

$ sudo pacman -S acct

在 Fedora、RHEL 及其衍生版本(如 CentOS、AlmaLinux 和 Rocky Linux)中安装 psacct,请运行以下命令:

$ sudo dnf install psacct

在 RHEL 6 以及更早版本中,你应当使用 yum 命令而非 dnf 来安装 psacct

$ sudo yum install psacct

在 Debian、Ubuntu 以及 Linux Mint 中,通过如下命令来安装 acct

$ sudo apt install acct

若在 openSUSE 中安装 acct,则运行:

$ sudo zypper install acct

启动 psacct/acct 服务

要启用并开启 psacct 服务,请执行以下命令:

$ sudo systemctl enable psacct

接着启动 psacct 服务:

$ sudo systemctl start psacct

如果你需要检查 psacct 服务是否已加载和激活,可以运行:

$ sudo systemctl status psacct

在基于 DEB 的系统中,安装完成之后,acct 服务会自动启动。

如果你想验证 acct 服务是否已经启动,可以执行以下命令:

$ sudo systemctl status acct
● acct.service - Kernel process accounting
     Loaded: loaded (/lib/systemd/system/acct.service; enabled; vendor preset: enabled)
     Active: active (exited) since Thu 2022-10-13 16:06:35 IST; 28s ago
       Docs: man:accton(8)
    Process: 3241 ExecStart=/usr/sbin/accton /var/log/account/pacct (code=exited, status=0/SUCCESS)
   Main PID: 3241 (code=exited, status=0/SUCCESS)
        CPU: 879us

Oct 13 16:06:35 ubuntu2204 systemd[1]: Starting Kernel process accounting...
Oct 13 16:06:35 ubuntu2204 accton[3241]: Turning on process accounting, file set to '/var/log/account/pacct'.
Oct 13 16:06:35 ubuntu2204 systemd[1]: Finished Kernel process accounting.

利用 psacct 或 acct 来监测 Linux 中的用户活动

psacct(进程记账)软件包包含以下用来监测用户和进程活动的工具:

  • ac - 提供用户登录时间的统计信息。
  • lastcomm - 展示先前执行过的命令的信息。
  • accton - 开启或关闭进程记账。
  • dump-acct - 把 accton 的输出文件转化为易读的格式。
  • dump-utmp - 以易读的方式打印 utmp 文件。
  • sa - 汇总信息,关于先前执行的命令。

现在就让我们一起了解如何通过每个工具来监控 Linux 用户的活动。

1、使用 ac 命令

ac 工具可以为你提供以小时为单位的连接时间报告,这样你就能知道用户或一组用户连接到系统的时长。

1.1、展示所有用户的总连接时间
$ ac

上述命令会显示所有用户的总连接时间(单位为小时)。

total       52.91

展示所有用户的总连接时间

1.2、按日期排序显示所有用户的总连接时间

你可以通过使用 -d 参数,按日期排序显示所有用户的连接时间,操作如下:

$ ac -d

示例输出:

May 11    total        4.29
May 13    total        3.23
May 14    total        7.66
May 15    total        8.97
May 16    total        0.52
May 20    total        4.09
May 24    total        1.32
Jun  9    total       15.18
Jun 10    total        2.97
Jun 22    total        2.61
Jul 19    total        1.95
Today    total        0.29

按日期排序显示所有用户的总时间

1.3、获取各个用户的总连接时间

使用 -p 参数,你可以查看每位用户各自在系统中总的连接时长。

$ ac -p

示例输出:

ostechnix                           52.85
root                                 0.51
total       53.36

获取各个用户的总连接时间

1.4、显示指定用户的总连接时间

你还可以显示特定用户的总登录时间。

$ ac ostechnix

示例输出:

total       52.95
1.5、显示特定用户各日期的总连接时间

要按日期查看某个用户的登录时间,可以运行:

$ ac -d ostechnix

示例输出:

May 11    total        4.29
May 13    total        3.23
May 14    total        7.66
May 15    total        8.97
May 16    total        0.01
May 20    total        4.09
May 24    total        1.32
Jun  9    total       15.18
Jun 10    total        2.97
Jun 22    total        2.61
Jul 19    total        1.95
Today    total        0.68

显示某个用户各日期的总连接时间

如需更多详情,可参考手册页面。

$ man ac

2、lastcomm 命令使用示例

lastcomm 工具用于列出过去执行过的命令,它会按执行的最近程度将命令列在前面。

2.1、展示过去执行的命令
$ lastcomm

示例输出:

systemd-hostnam  S     root     __         0.06 secs Thu Oct 13 17:21
systemd-localed  S     root     __         0.06 secs Thu Oct 13 17:22
bash              F    ostechni pts/1      0.00 secs Thu Oct 13 17:22
awk                    ostechni pts/1      0.00 secs Thu Oct 13 17:22
bash              F    ostechni pts/1      0.00 secs Thu Oct 13 17:22
uname                  ostechni pts/1      0.00 secs Thu Oct 13 17:22
bash              F    ostechni pts/1      0.00 secs Thu Oct 13 17:22
sed                    ostechni pts/1      0.00 secs Thu Oct 13 17:22
bash              F    ostechni pts/1      0.00 secs Thu Oct 13 17:22
bash              F    ostechni pts/1      0.00 secs Thu Oct 13 17:22
grep                   ostechni pts/1      0.00 secs Thu Oct 13 17:22
bash              F    ostechni pts/1      0.00 secs Thu Oct 13 17:22
bash              F    ostechni pts/1      0.00 secs Thu Oct 13 17:22
grep                   ostechni pts/1      0.00 secs Thu Oct 13 17:22
bash              F    ostechni pts/1      0.00 secs Thu Oct 13 17:22
bash              F    ostechni pts/1      0.00 secs Thu Oct 13 17:22
[...]
2.2、打印特定用户先前执行的命令

上述命令显示的是所有用户的命令。要显示特定用户以前执行的命令,可以使用下面的命令:

$ lastcomm ostechnix

示例输出:

less                   ostechni pts/1      0.00 secs Thu Oct 13 17:26
lastcomm               ostechni pts/1      0.00 secs Thu Oct 13 17:26
lastcomm               ostechni pts/1      0.00 secs Thu Oct 13 17:26
lastcomm               ostechni pts/1      0.00 secs Thu Oct 13 17:26
gdbus                X ostechni __         0.00 secs Thu Oct 13 17:24
lastcomm               ostechni pts/1      0.00 secs Thu Oct 13 17:24
ac                     ostechni pts/1      0.00 secs Thu Oct 13 17:24
update-notifier   F    ostechni __         0.00 secs Thu Oct 13 17:23
apport-checkrep        ostechni __         0.06 secs Thu Oct 13 17:23
apport-checkrep        ostechni __         0.05 secs Thu Oct 13 17:23
systemctl              ostechni __         0.00 secs Thu Oct 13 17:23
apt-check              ostechni __         0.81 secs Thu Oct 13 17:23
dpkg                   ostechni __         0.00 secs Thu Oct 13 17:23
ischroot               ostechni __         0.00 secs Thu Oct 13 17:23
dpkg                   ostechni __         0.00 secs Thu Oct 13 17:23
[...]
2.3、打印特定命令的执行次数

你还可以查看特定命令被执行的次数。

$ lastcomm apt

示例输出:

apt              S     root     pts/2      0.70 secs Thu Oct 13 16:06
apt               F    root     pts/2      0.00 secs Thu Oct 13 16:06
apt               F    root     pts/2      0.00 secs Thu Oct 13 16:06

如上述输出所示,root 用户执行了 apt 命令三次。

更详细的信息,可参考手册页:

$ man lastcomm

3、sa 命令示例

sa 实用程序将总结关于先前执行的命令的信息。

3.1、打印所有命令的总结
$ sa

示例输出:

1522    1598.63re       0.23cp         0avio     32712k
    139     570.90re       0.05cp         0avio     36877k   ***other*
     38     163.63re       0.05cp         0avio    111445k   gdbus
      3       0.05re       0.04cp         0avio     12015k   apt-check
     27     264.27re       0.02cp         0avio         0k   kworker/dying*
      2      51.87re       0.01cp         0avio   5310464k   Docker Desktop
      5       0.03re       0.01cp         0avio       785k   snap-confine
      8      59.48re       0.01cp         0avio     85838k   gmain
      5     103.94re       0.01cp         0avio    112720k   dconf worker
     24       3.38re       0.00cp         0avio      2937k   systemd-udevd*
      7       0.01re       0.00cp         0avio     36208k   5
      3       1.51re       0.00cp         0avio      3672k   systemd-timedat
      2       0.00re       0.00cp         0avio     10236k   apport-checkrep
      2       0.01re       0.00cp         0avio   4316160k   ThreadPoolForeg*
      2       0.00re       0.00cp         0avio      8550k   package-data-do
      3       0.79re       0.00cp         0avio      2156k   dbus-daemon
     12       0.00re       0.00cp         0avio     39631k   ffmpeg
[...]
3.2、查看进程数量和 CPU 分钟数

要打印基于每个用户的进程数量和 CPU 分钟数,运行带 -m 标志的 sa 命令:

$ sa -m

示例输出:

1525    1598.63re       0.23cp         0avio     32651k
root                                  561     647.23re       0.09cp         0avio      3847k
ostechnix                             825     780.79re       0.08cp         0avio     47788k
gdm                                   117      13.43re       0.06cp         0avio     63715k
colord                                  2      52.01re       0.00cp         0avio     89720k
geoclue                                 1       1.01re       0.00cp         0avio     70608k
jellyfin                               12       0.00re       0.00cp         0avio     39631k
man                                     1       0.00re       0.00cp         0avio      3124k
kernoops                                4     104.12re       0.00cp         0avio      3270k
sshd                                    1       0.05re       0.00cp         0avio      3856k
whoopsie                                1       0.00re       0.00cp         0avio      8552k
3.3、打印用户 ID 和命令名称

对于账户文件中的每个命令,使用 -u 标志打印用户 ID 和命令名称。

$ sa -u

示例输出:

root       0.00 cpu      693k mem      0 io accton          
root       0.00 cpu     3668k mem      0 io systemd-tty-ask 
root       0.00 cpu     3260k mem      0 io systemctl       
root       0.01 cpu     3764k mem      0 io deb-systemd-inv 
root       0.00 cpu      722k mem      0 io acct.postinst   
root       0.00 cpu      704k mem      0 io rm              
root       0.00 cpu      939k mem      0 io cp              
root       0.00 cpu      704k mem      0 io rm              
root       0.00 cpu      951k mem      0 io find            
root       0.00 cpu      911k mem      0 io gzip            
root       0.00 cpu      722k mem      0 io sh              
root       0.00 cpu      748k mem      0 io install-info    
root       0.00 cpu      911k mem      0 io gzip            
[...]

如需更多详细信息,请参考手册页:

$ man sa

4、dump-acct 和 dump-utmp 命令

dump-acct 实用工具将 accton 格式的输出文件显示为人类可读的格式。

$ dump-acct /var/account/pacct

dump-utmp 将 utmp 文件显示为人类可读的格式。

$ dump-utmp /var/run/utmp

如需了解更多详情,请参考手册页:

$ man dump-acct
$ man dump-utmp

5、accton 命令

accton 命令将允许你开启或关闭记账。

要开启进程记账,请运行:

$ accton on

要关闭它,运行:

$ accton off

如需了解更多详情,请参考手册页:

$ man accton

总结

每个 Linux 管理员都应该知道 GNU 记账实用程序,以便注意所有用户的行为。在故障排除时,这些实用程序会非常有帮助。

资源

(题图:MJ/da3f7e79-2a53-4121-a2ed-d63a22c3d3f4)


via: https://ostechnix.com/monitor-user-activity-linux/

作者:sk 选题:lkxed 译者:ChatGPT 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

使用 Python 制作一个 API 来监控你的树莓派硬件,并使用 Appsmith 建立一个仪表盘。

如果你想知道你的树莓派的性能如何,那么你可能需要一个树莓派的仪表盘。在本文中,我将演示如何快速构建一个按需监控仪表盘,以实时查看你的树莓派的 CPU 性能、内存和磁盘使用情况,并根据需要随时添加更多视图和操作。

如果你已经使用 Appsmith,你还可以直接导入 示例应用程序 并开始使用。

Appsmith

Appsmith 是一个开源的 低代码 应用构建工具,帮助开发人员轻松快速地构建内部应用,如仪表盘和管理面板。它是一个用于仪表盘的很好选择,并减少了传统编码方法所需的时间和复杂性。

在此示例的仪表盘中,我显示以下统计信息:

  • CPU

    • 占用百分比
    • 频率或时钟速度
    • 计数
    • 温度
  • 内存

    • 占用百分比
    • 可用内存百分比
    • 总内存
    • 空闲内存
  • 磁盘

    • 磁盘使用百分比
    • 绝对磁盘空间使用量
    • 可用磁盘空间
    • 总磁盘空间

创建一个端点

你需要一种从树莓派获取这些数据并传递给 Appsmith 的方法。psutil 是一个用于监控和分析的 Python 库,而 Flask-RESTful 是一个创建 REST API 的 Flask 扩展。

Appsmith 每隔几秒钟调用 REST API 以自动刷新数据,并以 JSON 对象作为响应,其中包含所有所需的统计信息,如下所示:

{ "cpu_count": 4,
"cpu_freq": [
600.0,
600.0,
1200.0 ],
"cpu_mem_avail": 463953920,
"cpu_mem_free": 115789824,
"cpu_mem_total": 971063296,
"cpu_mem_used": 436252672,
"cpu_percent": 1.8,
"disk_usage_free": 24678121472,
"disk_usage_percent": 17.7,
"disk_usage_total": 31307206656,
"disk_usage_used": 5292728320,
"sensor_temperatures": 52.616 }

1、设置 REST API

如果你的树莓派尚未安装 Python,请在树莓派上打开终端并运行此安装命令:

$ sudo apt install python3

现在为你的开发设置一个 Python 虚拟环境

$ python -m venv PiData

接下来,激活该环境。你必须在重新启动树莓派后执行此操作。

$ source PiData/bin/activate
$ cd PiData

为了安装 Flask、Flask-RESTful 和以后需要的依赖项,请在你的 Python 虚拟环境中创建一个名为 requirements.txt 的文件,并将以下内容添加到其中:

flask
flask-restful
gunicorn

保存文件,然后使用 pip 一次性安装它们。你必须在重新启动树莓派后执行此操作。

(PyData)$ python -m pip install -r requirements.txt

接下来,创建一个名为 pi_stats.py 的文件来存放使用 psutil 检索树莓派系统统计信息的逻辑。将以下代码粘贴到 pi_stats.py 文件中:

from flask import Flask
from flask_restful import Resource, Api
import psutil
app = Flask(__name__)

api = Api(app)
class PiData(Resource):
    def get(self):
        return "RPI Stat dashboard"

api.add_resource(PiData, '/get-stats')

if __name__ == '__main__':
    app.run(debug=True)

这段代码的作用如下:

  • 使用 app = Flask(name) 来定义嵌套 API 对象的应用程序。
  • 使用 Flask-RESTful 的 API 方法 来定义 API 对象。
  • 在 Flask-RESTful 中将 PiData 定义为具体的 Resource 类 ,以公开每个支持的 HTTP 方法。
  • 使用 api.add_resource(PiData, '/get-stats') 将资源 PiData 附加到 API 对象 api
  • 每当你访问 URL /get-stats 时,将返回 PiData 作为响应。

2、使用 psutil 读取统计信息

要从你的树莓派获取统计信息,你可以使用 psutil 提供的这些内置函数:

  • cpu_percentagecpu_countcpu_freqsensors_temperatures 函数分别用于获取 CPU 的占用百分比、计数、时钟速度和温度。sensors_temperatures 报告了与树莓派连接的所有设备的温度。要仅获取 CPU 的温度,请使用键 cpu-thermal
  • virtual_memory 函数可返回总内存、可用内存、已使用内存和空闲内存的统计信息(以字节为单位)。
  • disk_usage 函数可返回总磁盘空间、已使用空间和可用空间的统计信息(以字节为单位)。

将所有函数组合到一个 Python 字典中的示例如下:

system_info_data = {
'cpu_percent': psutil.cpu_percent(1),
'cpu_count': psutil.cpu_count(),
'cpu_freq': psutil.cpu_freq(),
'cpu_mem_total': memory.total,
'cpu_mem_avail': memory.available,
'cpu_mem_used': memory.used,
'cpu_mem_free': memory.free,
'disk_usage_total': disk.total,
'disk_usage_used': disk.used,
'disk_usage_free': disk.free,
'disk_usage_percent': disk.percent,
'sensor_temperatures': psutil.sensors_temperatures()['cpu-thermal'][0].current,
}

下一节将使用该字典。

3、从 Flask-RESTful API 获取数据

为了在 API 响应中看到来自树莓派的数据,请更新 pi_stats.py 文件,将字典 system_info_data 包含在 PiData 类中:

from flask import Flask
from flask_restful import Resource, Api
import psutil
app = Flask(__name__)
api = Api(app)

class PiData(Resource):
    def get(self):
        memory = psutil.virtual_memory()
        disk = psutil.disk_usage('/')
        system_info_data = {
            'cpu_percent': psutil.cpu_percent(1),
            'cpu_count': psutil.cpu_count(),
            'cpu_freq': psutil.cpu_freq(),
            'cpu_mem_total': memory.total,
            'cpu_mem_avail': memory.available,
            'cpu_mem_used': memory.used,
            'cpu_mem_free': memory.free,
            'disk_usage_total': disk.total,
            'disk_usage_used': disk.used,
            'disk_usage_free': disk.free,
            'disk_usage_percent': disk.percent,
            'sensor_temperatures': psutil.sensors_temperatures()['cpu-thermal'][0].current, }

    return system_info_data

api.add_resource(PiData, '/get-stats')

if __name__ == '__main__':
    app.run(debug=True)

你的脚本已经就绪,下面运行 PiData.py

$ python PyData.py
 * Serving Flask app "PiData" (lazy loading)
 * Environment: production
 WARNING: This is a development server. Do not run this in a production environment.
 
 * Debug mode: on
 * Running on http://127.0.0.1:5000 (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!

你有了一个可以工作的 API。

4、将 API 提供给互联网

你可以在本地网络中与 API 进行交互。然而,要在互联网上访问它,你必须在防火墙中打开一个端口,并将传入的流量转发到由 Flask 提供的端口。然而,正如你的测试输出建议的那样,在 Flask 中运行 Flask 应用程序仅适用于开发,而不适用于生产。为了安全地将 API 提供给互联网,你可以使用安装过程中安装的 gunicorn 生产服务器。

现在,你可以启动 Flask API。每次重新启动树莓派时都需要执行此操作。

$ gunicorn -w 4 'PyData:app'
Serving on http://0.0.0.0:8000

要从外部世界访问你的树莓派,请在网络防火墙中打开一个端口,并将流量定向到你树莓派的 IP 地址,端口为 8000。

首先,获取树莓派的内部 IP 地址:

$ ip addr show | grep inet

内部 IP 地址通常以 10 或 192 或 172 开头。

接下来,你必须配置防火墙。通常,你从互联网服务提供商(ISP)获取的路由器中嵌入了防火墙。通常,你可以通过网络浏览器访问家用路由器。路由器的地址有时会打印在路由器的底部,它以 192.168 或 10 开头。不过,每个设备都不同,因此我无法告诉你需要点击哪些选项来调整设置。关于如何配置防火墙的完整描述,请阅读 Seth Kenlon 的文章 《打开端口并通过你的防火墙路由流量》。

或者,你可以使用 localtunnel 来使用动态端口转发服务。

一旦你的流量到达树莓派,你就可以查询你的 API:

$ curl https://example.com/get-stats
{
   "cpu_count": 4,
   "cpu_freq": [
      600.0,
      600.0,
      1200.0 ],
   "cpu_mem_avail": 386273280,
   ...

如果你已经执行到这一步,那么最困难的部分已经过去了。

5、重复步骤

如果你重新启动了树莓派,你必须按照以下步骤进行操作:

  • 使用 source 重新激活 Python 环境
  • 使用 pip 刷新应用程序的依赖项
  • 使用 gunicorn 启动 Flask 应用程序

你的防火墙设置是持久的,但如果你使用了 localtunnel,则必须在重新启动后启动新的隧道。

如果你愿意,可以自动化这些任务,但那是另一个教程的内容。本教程的最后一部分是在 Appsmith 上构建一个用户界面,使用拖放式小部件和一些 JavaScript,将你的树莓派数据绑定到用户界面。相信我,从现在开始很容易!

在 Appsmith 上构建仪表盘

硬件监控仪表盘

要制作一个像这样的仪表盘,你需要将公开的 API 端点连接到 Appsmith,使用 Appsmith 的小部件库构建用户界面,并将 API 的响应绑定到小部件上。如果你已经使用 Appsmith,你可以直接导入 示例应用程序 并开始使用。

如果你还没有,请 注册 一个免费的 Appsmith 帐户。或者,你可以选择 自托管 Appsmith

将 API 作为 Appsmith 数据源连接

登录到你的 Appsmith 帐户。

  • 在左侧导航栏中找到并点击 “ 查询或 JS QUERIES/JS ” 旁边的 “+” 按钮。
  • 点击 “ 创建一个空白 API Create a blank API ”。
  • 在页面顶部,将你的项目命名为 “PiData”。
  • 获取你的 API 的 URL。如果你使用的是 localtunnel,则是一个 localtunnel.me 地址,总是在末尾添加 /get-stats 以获取统计数据。将其粘贴到页面的第一个空白字段中,然后点击 “RUN” 按钮。

确保在 “ 响应 Response ” 面板中看到成功的响应。

Appsmith 界面

构建用户界面

Appsmith 的界面非常直观,但如果你感到迷失,我建议你查看 在 Appsmith 上构建你的第一个应用程序 教程。

对于标题,将 “ 文本 Text ”、“ 图像 Image ” 和 “ 分隔线 Divider ” 小部件拖放到画布上。将它们排列如下:

设置项目标题

文本 Text ” 小部件包含你页面的实际标题。键入比“Raspberry Pi Stats”更酷的内容。

图像 Image ” 小部件用于展示仪表盘的独特标志。你可以使用你喜欢的任何标志。

使用 “ 开关 Switch ” 小部件来切换实时数据模式。在 “ 属性 Property ” 面板中进行配置,以从你构建的 API 获取数据。

对于主体部分,使用来自左侧的小部件库的以下小部件创建一个 CPU 统计信息区域,使用以下小部件:

  • 进度条 Progress Bar
  • 统计框 Stat Box
  • 图表 Chart

对于内存和磁盘统计信息部分,重复相同的步骤。磁盘统计信息部分不需要图表,但如果你能找到用途,那也可以使用它。

你的最终小部件布局应该类似于以下:

Appsmith 中的属性设置

最后一步是将 API 的数据绑定到你的小部件上。

将数据绑定到小部件上

返回到画布,并在三个类别的部分中找到你的小部件。首先设置 CPU 统计信息。

要将数据绑定到 “ 进度条 Progress Bar ” 小部件:

  • 单击 “ 进度条 Progress Bar ” 小部件,以打开右侧的 “ 属性 Property ” 面板。
  • 查找 “ 进度 Progress ” 属性。
  • 单击 “JS” 按钮以激活 JavaScript。
  • 在 “ 进度 Progress ” 字段中粘贴 {{PiData.data.cpu_percent ?? 0}}。此代码引用了你的 API 的数据流,名为 PiData。Appsmith 将响应数据缓存在 PiData.data 运算符内。键 cpu_percent 包含了 Appsmith 用来显示 CPU 利用率百分比的数据。
  • 在 “ 进度条 Progress Bar ” 小部件下方添加一个 “ 文本 Text ” 小部件作为标签。

在配置屏幕中绑定数据

在 CPU 部分有三个 “ 统计框 Stat Box ” 小部件。将数据绑定到每个小部件的步骤与绑定 “ 进度条 Progress Bar ” 小部件的步骤完全相同,只是你需要从 .data 运算符中绑定不同的数据属性。按照相同的步骤进行操作,但有以下例外:

  • 使用 {{${PiData.data.cpu_freq[0]} ?? 0 }} 来显示时钟速度。
  • 使用 {{${PiData.data.cpu_count} ?? 0 }} 来显示 CPU 计数。
  • 使用 {{${(PiData.data.sensor_temperatures).toPrecision(3)} ?? 0 }} 来显示 CPU 温度数据。

如果一切顺利,你将得到一个漂亮的仪表盘,如下所示:

树莓派的仪表盘

CPU 利用率趋势图

你可以使用 “ 图表 Chart ” 小部件将 CPU 利用率显示为趋势线,并使其随时间自动更新。

首先,单击小部件,在右侧找到 “ 图表类型 Chart Type ” 属性,并将其更改为 “ 折线图 LINE CHART ”。为了显示趋势线,需要将 cpu_percent 存储在数据点数组中。你的 API 目前将其作为单个时间数据点返回,因此可以使用 Appsmith 的 storeValue 函数(Appsmith 内置的 setItem 方法的一个原生实现)来获取一个数组。

在 “ 查询或 JS QUERIES/JS ” 旁边单击 “+” 按钮,并将其命名为 “utils”。

将以下 JavaScript 代码粘贴到 “ 代码 Code ” 字段中:

export default {
  getLiveData: () => {
  //When switch is on:
    if (Switch1.isSwitchedOn) {
      setInterval(() => {
        let utilData = appsmith.store.cpu_util_data;

        PiData.run()
          storeValue("cpu_util_data", [...utilData, {
            x: PiData.data.cpu_percent,
            y: PiData.data.cpu_percent
          }]);           
        }, 1500, 'timerId')
      } else {
    clearInterval('timerId');
  }
},
initialOnPageLoad: () => {
  storeValue("cpu_util_data", []);
  }
}

为了初始化 Store,你在 initialOnPageLoad 对象中创建了一个 JavaScript 函数,并将 storeValue 函数放在其中。

你使用 storeValue("cpu_util_data", []);cpu_util_data 中的值存储到 storeValue 函数中。此函数在页面加载时运行。

到目前为止,每次刷新页面时,代码都会将 cpu_util_data 中的一个数据点存储到 Store 中。为了存储一个数组,你使用了 xy 的下标变量,两者都存储了来自 cpu_percent 数据属性的值。

你还希望通过设定存储值之间的固定时间间隔来自动存储这些数据。当执行 setInterval 函数时:

  • 获取存储在 cpu_util_data 中的值。
  • 调用 API PiData
  • 使用返回的最新 cpu_percent 数据将 cpu_util_data 更新为 xy 变量。
  • cpu_util_data 的值存储在键 utilData 中。
  • 仅当设置为自动执行函数时,才重复执行步骤 1 到 4。你使用 Switch 小部件将其设置为自动执行,这就解释了为什么有一个 getLiveData 父函数。

在 “ 设置 Settings ” 选项卡中,找到对象中的所有父函数,并在 “ 页面加载时运行 RUN ON PAGE LOAD ” 选项中将 initialOnPageLoad 设置为 “Yes(是)”。

设置页面加载时要执行的函数

现在刷新页面进行确认。

返回到画布。单击 “ 图表 Chart ” 小部件,并找到 “ 图表数据 Chart Data ” 属性。将绑定 {{ appsmith.store.disk_util_data }} 粘贴到其中。这样,如果你自己多次运行对象 utils,就可以获得图表数据。要自动运行此操作:

  • 查找并单击仪表盘标题中的 “ 实时数据开关 Live Data Switch ” 小部件。
  • 查找 onChange 事件。
  • 将其绑定到 {{ utils.getLiveData() }}。JavaScript 对象是 utils,而 getLiveData 是在你切换开关时激活的函数,它会从你的树莓派获取实时数据。但是还有其他实时数据,因此同一开关也适用于它们。继续阅读以了解详情。

将数据绑定到内存和磁盘部分的小部件与你在 CPU 统计信息部分所做的方式类似。

对于内存部分,绑定如下所示:

  • 进度条中的绑定为:{{( PiData.data.cpu_mem_avail/1000000000).toPrecision(2) \* 100 ?? 0 }}
  • 三个统计框小部件的绑定分别为:{{ \${(PiData.data.cpu_mem_used/1000000000).toPrecision(2)} ?? 0 }} GB{{ \${(PiData.data.cpu_mem_free/1000000000).toPrecision(2)} ?? 0}} GB{{ \${(PiData.data.cpu_mem_total/1000000000).toPrecision(2)} ?? 0 }} GB

对于磁盘部分,进度条和统计框小部件的绑定分别变为:

  • 进度条的绑定为:{{ PiData.data.disk_usage_percent ?? 0 }}
  • 三个统计框小部件的绑定分别为:{{ \${(PiData.data.disk_usage_used/1000000000).toPrecision(2)} ?? 0 }} GB{{ \${(PiData.data.disk_usage_free/1000000000).toPrecision(2)} ?? 0 }} GB{{ \${(PiData.data.disk_usage_total/1000000000).toPrecision(2)} ?? 0 }} GB

这里的图表需要更新你为 CPU 统计信息创建的 utils 对象,使用 storeValue 键名为 disk_util_data,嵌套在 getLiveData 下面,其逻辑与 cpu_util_data 类似。对于磁盘利用率图表,我们存储的 disk_util_data 的逻辑与 CPU 利用率趋势图的逻辑相同。

export default {
  getLiveData: () => {
  //When switch is on:
    if (Switch1.isSwitchedOn) {
      setInterval(() => {
       const cpuUtilData = appsmith.store.cpu_util_data;
       const diskUtilData = appsmith.store.disk_util_data;                   
       
       PiData.run();
       
       storeValue("cpu_util_data", [...cpuUtilData, { x: PiData.data.cpu_percent,y: PiData.data.cpu_percent }]);
       storeValue("disk_util_data", [...diskUtilData, { x: PiData.data.disk_usage_percent,y: PiData.data.disk_usage_percent }]);
    }, 1500, 'timerId')
  } else {
    clearInterval('timerId');
  }
},
  initialOnPageLoad: () => {
    storeValue("cpu_util_data", []);
    storeValue("disk_util_data", []);
  }
}

通过使用 utils JavaScript 对象在打开和关闭真实数据开关时触发的数据流可视化如下所示:

切换

在打开实时数据开关时,图表会变成这样:

显示实时数据

整体上,它既漂亮,又简约,而且非常有用。

祝你使用愉快!

当你对 psutils、JavaScript 和 Appsmith 更加熟悉时,我相信你会发现可以轻松无限地调整你的仪表板,实现非常酷的功能,例如:

  • 查看先前一周、一个月、一个季度、一年或根据你的树莓派数据允许的任何自定义范围的趋势
  • 为任何统计数据的阈值违规构建报警机制
  • 监控连接到你的树莓派的其他设备
  • psutils 扩展到另一台安装有 Python 的计算机上
  • 使用其他库监控你家庭或办公室的网络
  • 监控你的花园
  • 跟踪你自己的生活习惯

在下一个令人兴奋的项目中,祝你玩得愉快!

(题图:MJ/9754eb1f-1722-4897-9c35-3f20c285c332)


via: https://opensource.com/article/23/3/build-raspberry-pi-dashboard-appsmith

作者:Keyur Paralkar 选题:lkxed 译者:ChatGPT 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

使用这个方便的应用查看你的网络连接。

sniffet

嗅探,嗅探,那是什么? ?

这是我在系统上看到的可疑网络连接吗? ?❌

你可能想知道我如何查看系统上的网络活动。 嗯,当然,一些 系统监控工具 应该有所帮助。但是,如果我想要更多详细信息怎么办?

好吧,我遇到了一个不错的工具 Sniffnet。 它是一个用于实时监控网络活动的简洁的开源应用,也是专有的 GlassWire(如 Portmaster)的一个很好的替代品。

那么,让我们深入挖掘吧!

Sniffnet:概述 ⭐

a screenshot of sniffnet running on linux

Sniffnet 是一个基于 Rust 的网络监控工具,可让你跟踪通过系统的所有互联网流量。 它提供了一些非常有用的功能,高级用户肯定会喜欢这些功能**。

当你第一次启动 Sniffnet 时,你会看到一个菜单来选择网络适配器、过滤器和应用协议

完成选择后,单击“火箭”按钮开始。

a screenshot of the network adapter selector on sniffnet

这是概览页的样子。它显示了所有当前的网络连接,以及一个方便的流量图,供你分析流量。

? 你可以选择将数据显示为字节或单个数据包。

a screenshot of the overview tab on sniffnet

要更深入地查看你的网络连接,你可以前往“ 检查 Inspect ”选项卡。

在这里,你将看到一个包含所有重要信息的列表,例如 IP 地址、数据包数量、数据量、来源国家等等。

你可以单击各个连接获得更详细的情况。

a screenshot of the inspect tab on sniffnet

如果你想为更具体的目的过滤结果怎么办?

好吧,那么你可以使用“检查”选项卡下的过滤器选项根据你的需要过滤结果。

你可以通过以下方式过滤列表: 应用、国家、域名等。

这是它的样子:

a screenshot of the filter functionality on sniffnet

Sniffnet 还可以向你显示可以以文本格式导出的连接的详细报告。

只需单击右下角带有页面/向右箭头的徽标即可开始。

a screenshot of the connection report functionality on sniffnet

可定制性如何?

好吧,Sniffnet 有一组不错的设置供你调整。

第一个是“通知”选项卡,它允许你根据可以设置的各种阈值来设置通知的行为。

a screenshot of the notifications settings on sniffnet

然后是可以通过“ 样式 Style ”选项卡访问的主题。它提供四种选择,雪人之夜是我的最爱。

a screenshot of the style settings on sniffnet

最后,“ 语言 Language ”选项卡允许你设置你选择的界面语言。

a screenshot of the language settings on sniffnet

好了,就此结束。

Sniffnet 是一个方便的工具,可以非常详细地了解系统上的网络活动。

你可以使用它来监控你的网络。

此外,与另一个网络监控工具 Nutty 相比,在我看来,Sniffnet 的使用和设置要直观得多。

? 获取 Sniffnet

Sniffnet 可跨多个平台使用,包括 LinuxWindowsmacOS。 你可以前往官方网站获取你选择的安装包。

Sniffnet

如果愿意,你还可以在 GitHub 上仔细查看其源代码。


via: https://news.itsfoss.com/sniffnet/

作者:Sourav Rudra 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

你好! 我最近又开始运行一些服务器(nginx playgroundmess with dnsdns lookup),所以我一直在考虑监控问题。

最初我并不完全清楚如何监控这些网站,所以我想快速写下我是如何做到的。

我根本不打算谈如何监控大型的、严肃的关键任务网站,只谈微型的不重要的网站。

目标:在操作上几乎不花时间

我希望网站大部分时间都能正常工作,但我也希望不用在持续的运营上花费时间。

我最初对运行服务器非常警惕,因为在我的上一份工作中,我是 24/7 轮流值班,负责一些关键的服务,在我的印象中,“负责服务器”意味着“在凌晨 2 点被叫起来修理服务器”和“有很多复杂的仪表盘”。

所以有一段时间我只做静态网站,这样我就不用考虑服务器的问题。

但最终我意识到,我所要写的任何服务器的风险都很低,如果它们偶尔宕机 2 小时也没什么大不了的,我只需设置一些非常简单的监控来帮助它们保持运行。

没有监控很糟糕

起初,我根本没有为我的服务器设置任何监控。这样做的结果是非常可预见的:有时网站坏了,而我却没有发现,直到有人告诉我!

步骤 1:uptime 检查器

第一步是建立一个 uptime 检查器。外面有很多这样的东西,我现在使用的是 updown.iouptime robot。我更喜欢 updown 的用户界面和 定价 结构(它是按请求而不是按月收费),但 uptime 机器人有一个更慷慨的免费套餐。

它们会:

  1. 检查网站是否正常
  2. 如果出现故障,它会给我发电子邮件

我发现电子邮件通知对我来说是一个很好的通知级别,如果网站宕机,我会很快发现,但它不会吵醒我或做其它的什么打扰。

步骤 2:端到端的健康检查

接下来,让我们谈谈“检查网站是否正常”到底是什么意思。

起初,我只是把我的健康检查端点之一变成一个函数,无论如何都会返回 200 OK

这倒是挺有用的 – 它告诉我服务器是启动着的!

但不出所料,我遇到了问题,因为它没有检查 API 是否真的在 工作 – 有时健康检查成功了,尽管服务的其他部分实际上已经进入了一个糟糕的状态。

所以我更新了它,让它真正地发出 API 请求,并确保它成功了。

我所有的服务都只做了很少的事情(nginx playground 只有一个端点),所以设置一个健康检查是非常容易的,它实际上贯穿了服务应该做的大部分动作。

下面是 nginx playground 的端到端健康检查处理程序的样子。它非常基本:它只是发出一个 POST 请求(给自己),并检查该请求是成功还是失败。

    func healthHandler(w http.ResponseWriter, r *http.Request) {
        // make a request to localhost:8080 with `healthcheckJSON` as the body
        // if it works, return 200
        // if it doesn't, return 500
        client := http.Client{}
        resp, err := client.Post("http://localhost:8080/", "application/json", strings.NewReader(healthcheckJSON))
        if err != nil {
            log.Println(err)
            w.WriteHeader(http.StatusInternalServerError)
            return
        }
        if resp.StatusCode != http.StatusOK {
            log.Println(resp.StatusCode)
            w.WriteHeader(http.StatusInternalServerError)
            return
        }
        w.WriteHeader(http.StatusOK)
    }

健康检查频率:每小时一次

现在,我大部分健康检查每小时运行一次,有些每 30 分钟运行一次。

我每小时运行一次,因为 updown.io 的定价是按健康检查次数计算的,我正在监控 18 个不同的 URL,而且我想把我的健康检查预算保持在 5 美元/年的最低水平。

花一个小时来发现这些网站中的一个出现故障,对我来说是可以的 – 如果有问题,我也不能保证能很快修复它。

如果可以更频繁地运行它们,我可能会每 5-10 分钟运行一次。

步骤 3:第三步:如果健康检查失败,自动重新启动

我的一些网站在 fly.io 上,fly 有一个相当标准的功能,我可以为一个服务配置一个 HTTP 健康检查,如果健康检查失败,就重新启动服务。

“经常重启”是一个非常有用的策略来弥补我尚未修复的 bug,有一段时间,nginx playground 有一个进程泄漏,nginx 进程没有被终止,所以服务器的内存一直在耗尽。

通过健康检查,其结果是,每隔一天左右就会发生这样的情况:

  • 服务器的内存用完了
  • 健康检查开始失败
  • 它被重新启动
  • 一切又正常了
  • 几个小时后再次重复整个传奇

最终,我开始实际修复进程泄漏,但很高兴有一个解决方法可以在我拖延修复 bug 时保持运行。

这些用于决定是否重新启动服务的运行状况检查更频繁地运行:每 5 分钟左右。

这不是监控大型服务的最佳方式

这可能很明显,我在一开始就已经说过了,但是“编写一个 HTTP 健康检查”并不是监控大型复杂服务的最佳方法。 但我不会深入讨论,因为这不是这篇文章的主题。

到目前为止一直运行良好!

我最初在 3 个月前的四月写了这篇文章,但我一直等到现在才发布它以确保整个设置正常工作。

这带来了很大的不同 – 在我遇到一些非常愚蠢的停机问题之前,现在在过去的几个月里,网站的运行时间达到了 99.95%!


via: https://jvns.ca/blog/2022/07/09/monitoring-small-web-services/

作者:Julia Evans 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Zeek 是一个开源的网络安全监控工具。本文讨论了如何将 Zeek 与 ELK 集成。

在本杂志 2022 年 3 月版发表的题为“用 Zeek 轻松实现网络安全监控”的文章中,我们研究了 Zeek 的功能,并学习了如何开始使用它。现在我们将把我们的学习经验再进一步,看看如何将其与 ELK(即 Elasticsearch、Kibana、Beats 和 Logstash)整合。

为此,我们将使用一个叫做 Filebeat 的工具,它可以监控、收集并转发日志到 Elasticsearch。我们将把 Filebeat 和 Zeek 配置在一起,这样后者收集的数据将被转发并集中到我们的 Kibana 仪表盘上。

安装 Filebeat

让我们首先将 Filebeat 与 Zeek 安装在一起。使用 apt 来安装 Filebeat,使用以下命令:

sudo apt install filebeat

接下来,我们需要配置 .yml 文件,它位于 /etc/filebeat/ 文件夹中:

sudo nano /etc/filebeat/filebeat.yml

我们只需要在这里配置两件事。在 Filebeat 输入部分,将类型改为 log,并取消对 enabled:false 的注释,将其改为 true。我们还需要指定存储日志的路径,也就是说,我们需要指定 /opt/zeek/logs/current/*.log

完成这些后,设置的第一部分应该类似于图 1 所示的内容。

Figure 1: Filebeat config (a)

第二件要修改的事情是在输出下的 Elasticsearch 输出部分,取消对 output.elasticsearchhosts 的注释。确保主机的 URL 和端口号与你安装 ELK 时配置的相似。我们把它保持为 localhost,端口号为 9200

在同一部分中,取消底部的用户名和密码的注释,输入安装后配置 ELK 时生成的 Elasticsearch 用户的用户名和密码。完成这些后,参考图 2,检查设置。

Figure 2: Filebeat config (b)

现在我们已经完成了安装和配置,我们需要配置 Zeek,使其以 JSON 格式存储日志。为此,确保你的 Zeek 实例已经停止。如果没有,执行下面的命令来停止它:

cd /opt/zeek/bin
./zeekctl stop

现在我们需要在 local.zeek 中添加一小行,它存在于 opt/zeek/share/zeek/site/ 目录中。

以 root 身份打开该文件,添加以下行:

@load policy/tuning/json-logs.zeek

参考图 3,确保设置正确。

Figure 3: local.zeek file

由于我们改变了 Zeek 的一些配置,我们需要重新部署它,这可以通过执行以下命令来完成:

cd /opt/zeek/bin
./zeekctl deploy

现在我们需要在 Filebeat 中启用 Zeek 模块,以便它转发 Zeek 的日志。执行下面的命令:

sudo filebeat modules enable zeek

我们几乎要好了。在最后一步,配置 zeek.yml 文件要记录什么类型的数据。这可以通过修改 /etc/filebeat/modules.d/zeek.yml 文件完成。

在这个 .yml 文件中,我们必须提到这些指定的日志存放在哪个目录下。我们知道,这些日志存储在当前文件夹中,其中有几个文件,如 dns.logconn.logdhcp.log 等等。我们需要在每个部分提到每个路径。如果而且只有在你不需要该文件/程序的日志时,你可以通过把启用值改为 false 来舍弃不需要的文件。

例如,对于 dns,确保启用值为 true,并且路径被配置:

var.paths: [ “/opt/zeek/logs/current/dns.log”, “/opt/zeek/logs/*.dns.json” ]

对其余的文件重复这样做。我们对一些我们需要的文件做了这个处理。我们添加了所有主要需要的文件。你也可以这样做。请参考图 4。

Figure 4: zeek.yml configuration

现在是启动 Filebeat 的时候了。执行以下命令:

sudo filebeat setup
sudo service filebeat start

现在一切都完成了,让我们移动到 Kibana 仪表板,检查我们是否通过 Filebeat 接收到来自 Zeek 的数据。

Figure 5: Dashboard of Kibana (Destination Geo)

进入仪表板。你可以看到它所捕获的数据的清晰统计分析(图 5 和图 6)。

Figure 6: Dashboard of Kibana (Network)

现在让我们进入发现选项卡,通过使用查询进行过滤来检查结果:

event.module: "zeek"

这个查询将过滤它在一定时间内收到的所有数据,只向我们显示名为 Zeek 的模块的数据(图 7)。

Figure 7: Filtered data by event.module query

鸣谢

作者感谢 VIT-AP 计算机科学与工程学院的 Sibi Chakkaravarthy Sethuraman、Sudhakar Ilango、Nandha Kumar R.和Anupama Namburu 的不断指导和支持。特别感谢人工智能和机器人技术卓越中心(AIR)。


via: https://www.opensourceforu.com/2022/06/integrating-zeek-with-elk-stack/

作者:Tridev Reddy 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

“系统监控中心”是一个多合一的开源应用,不用使用多种工具就可以监控基本的系统资源情况。

在 Linux 上以图形方式监控系统资源可能体验不是很好,这些与你的桌面环境相配套的系统监控工具可能细节有限。

例如,GNOME 的系统监视器不显示 CPU 频率和温度。

此外,Linux 的默认系统监控程序通常以简单为目标,而不是提供详细的信息。

系统监控中心 System Monitoring Center ” 是一个有用的 GUI 工具,它提供了大量必要的信息。在这篇文章中,让我给你详细介绍一下它。

系统监控中心:显示基本系统统计信息的 Linux 应用

系统监控中心是一个基于 GTK3 和 Python 3 的外观时尚的应用,它为你提供了你想要的所有资源使用数据。

在我的例子中,我想在使用系统监控工具时关注 CPU 的频率,但 GNOME 的系统监控工具提供不了帮助。所以,这个应用就非常有用了。

该应用的用户体验良好,并提供了大量的信息和功能。让我重点介绍一下它的主要功能。

写这篇文章时,该应用程序仍处于测试阶段。因此,你可能会遇到一些错误。然而,我在简短的测试中没有注意到任何问题。

系统监控中心的功能

首先,它可以让你查看 CPU、内存、磁盘、网络、GPU 和传感器的单独统计数据。

你可以在该工具中看到以下细节信息:

  • 显示 CPU 状态,包括频率
  • 能够显示平均使用率或每个核心的使用率
  • 可以选择 CPU 频率和其他统计的精度
  • 能够改变图表的颜色
  • 按用户过滤系统进程并轻松管理它们
  • 切换一个浮动的摘要小部件,以快速获得信息
  • 显示磁盘使用信息和连接的驱动器
  • 在同一个应用中显示详细的系统信息
  • 控制启动服务和程序
  • 能够控制状态更新的时间间隔
  • 应用本身的系统资源使用率较低
  • 适应系统主题

虽然它为每个标签(或组件)提供了大量的选项和自定义功能,但我希望它能在未来的更新中包括 RAM 频率等东西。

然而,考虑到它可以同时取代磁盘使用分析器和 neofetch 等终端工具,其余的数据似乎非常有用。

请注意,如果你有多个机箱风扇、独立的排风扇或 AIO,你可能无法得到风扇的数据。温度也可能有或没有,但 CPU 的温度应该是可见的。

在 Linux 中安装系统监控中心

你可以使用可用的 deb 包在任何基于 Ubuntu 的发行版上轻松安装它。

不幸的是,没有可用的其他软件包,只有一个 ZIP 文件,你得手动构建和编译才能安装它。你在 ZIP 文件中可以找到一个脚本来构建 RPM 包。

deb 文件可以通过 SourceForge 获得。你点击下面的按钮来下载它,或者在他们的 GitLab 页面 找到。

总结

系统监控中心是一个开源应用,可以让用户详细了解他们的系统资源,并帮助管理进程。

对于许多 Linux 用户来说,这是一个非常需要的应用,不需要使用单独的终端/GUI 程序就可以提供详细的信息。


via: https://itsfoss.com/system-monitoring-center/

作者:Ankush Das 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出