s5.日志服务

news2024/12/24 0:06:42

日志服务

      • 1. rsyslog 系统日志服务
      • 2.常见日志文件
      • 3. 启用网络日志服务
      • 4. 利用 MySQL 存储日志信息
      • 5. 日志管理工具 journalctl
      • 6. Logrotate 日志转储

1. rsyslog 系统日志服务

rsyslog是CentOS 6 以后版本的系统管理服务.它提供了高性能,出色的安全性和模块化设计。 尽管 rsyslog最初是常规的syslogd,但已发展成为一种瑞士军刀式的记录工具,能够接受来自各种来源的输 入,并将其转换,然后输出到不同的目的地。

当应用有限的处理时,RSYSLOG每秒可以将超过一百万的消息传递到本地目的地。 即使在远程的目的 地和更精细的处理中,性能通常也被认为是“惊人的”。

rsyslog 特性

  • 多线程
  • UDP, TCP, SSL, TLS, RELP
  • MySQL, PGSQL, Oracle实现日志存储
  • 强大的过滤器,可实现过滤记录日志信息中任意部分
  • 自定义输出格式
  • 适用于企业级中继链

系统日志术语

facility:设施,从功能或程序上对日志进行归类

#内置分类
auth, authpriv, cron, daemon,ftp,kern, lpr, mail, news, security(auth), user(default), uucp, syslog

#自定义的分类
local0-local7

Priority 优先级别,从低到高排序

debug,info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic)

rsyslog配置文件

/etc/rsyslog.conf 配置文件格式:由三部分组成

  • MODULES:相关模块配置
  • GLOBAL DIRECTIVES:全局配置
  • RULES:日志记录相关的规则配置

通常的日志文件的格式:

事件产生的日期时间 主机 进程(pid):事件内容

2.常见日志文件

  • /var/log/secure:系统安全日志,文本格式,应周期性分析
  • /var/log/btmp:当前系统上,用户的失败尝试登录相关的日志信息,二进制格式,lastb命令进行 查看
  • /var/log/wtmp:当前系统上,用户正常登录系统的相关日志信息,二进制格式,last命令可以查 看
  • /var/log/lastlog:每一个用户最近一次的登录信息,二进制格式,lastlog命令可以查看
  • /var/log/dmesg:CentOS7 之前版本系统引导过程中的日志信息,文本格式,开机后的硬件变化 将不再记录,也可以通过专用命令 dmesg查看,可持续记录硬件变化的情况
  • /var/log/boot.log 系统服务启动的相关信息,文本格式
  • /var/log/messages var/log/syslong :系统中大部分的信息
  • /var/log/anaconda : anaconda的日志

3. 启用网络日志服务

启用网络日志服务功能,可以将多个远程主机的日志,发送到集中的日志服务器,方便统一管理。

环境准备:
日志服务器(rsyslog):
ubuntu2204: 10.0.0.110

客户端主机:
ubuntu2204: 10.0.0.100
rocky8: 10.0.0.8

在这里插入图片描述

# 日志服务器
[root@Ubuntu2204 ~]#vim /etc/rsyslog.conf

# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514") 

[root@Ubuntu2204 ~]#systemctl restart rsyslog.service

# 客户端
# 在客户端指定将日志发送到远程的UDP的日志服务器
[root@Ubuntu2204 ~]#vim /etc/rsyslog.d/50-default.conf
auth,authpriv.*         /var/log/auth.log
auth,authpriv.*         @10.0.0.110:514

*.*;auth,authpriv.none      -/var/log/syslog
*.*;auth,authpriv.none      @10.0.0.110:514
[root@Ubuntu2204 ~]#systemctl restart rsyslog.service

[root@Rocky8 ~]#vim /etc/rsyslog.conf
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
*.info;mail.none;authpriv.none;cron.none                @10.0.0.110:514

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure
authpriv.*                                               @10.0.0.110:514 

[root@Rocky8 ~]#systemctl restart rsyslog.service

/etc/hosts 文件中将 127.0.1.1 映射到 zzz,而不是你预期的主机名 Ubuntu2204。这可能是导致日志信息中显示的主机名与实际设置的主机名不一致的原因。

4. 利用 MySQL 存储日志信息

利用rsyslog日志服务,将收集的日志记录于MySQL中

环境准备:
日志服务器(rsyslog):
ubuntu2204: 10.0.0.110

MySQL服务器:
ubuntu2204: 10.0.0.120

客户端主机:
ubuntu2204: 10.0.0.100
rocky8: 10.0.0.8

在这里插入图片描述

rsyslog服务器
# 安装连接mysql模块相关的程序包
[root@Ubuntu2204 ~]#apt update; apt -y install rsyslog-mysql
# 查看脚本文件内容
[root@Ubuntu2204 ~]#cat /usr/share/dbconfig-common/data/rsyslog-mysql/install/mysql
# 将脚本复制到数据库服务器上
[root@Ubuntu2204 ~]#scp /usr/share/dbconfig-common/data/rsyslog-mysql/install/mysql 10.0.0.120:

MySQL服务器
[root@Ubuntu2204 ~]#mysql -uroot -p123456

mysql> create database rsyslog;
mysql> use rsyslog;
mysql> source mysql;
mysql> show tables;
+------------------------+
| Tables_in_rsyslog      |
+------------------------+
| SystemEvents           |
| SystemEventsProperties |
+------------------------+
2 rows in set (0.01 sec)

mysql> create user 'rsyslog'@'10.0.0.%' identified by '123456';
mysql> grant all on rsyslog.* to 'rsyslog'@'10.0.0.%';

# 配置日志服务器将日志发送至指定数据库
[root@Ubuntu2204 ~]#vim /etc/rsyslog.conf
# 在 MODULES 语言下面,加下面行
module(load="ommysql") 

#在RULES语句块加下面行的格式
[root@Ubuntu2204 ~]#vim /etc/rsyslog.d/50-default.conf
#facility.priority   	:ommysql:DBHOST,DBNAME,DBUSER, PASSWORD 
*.info                  :ommysql:10.0.0.120,rsyslog,rsyslog,123456
[root@Ubuntu2204 ~]#systemctl restart rsyslog.service 

# 测试
mysql> SELECT COUNT(*) FROM SystemEvents;
+----------+
| COUNT(*) |
+----------+
|       17 |
+----------+
1 row in set (0.00 sec)

#在日志服务器上生成日志
[root@Ubuntu2204 ~]#logger "this is a test log!"

#在数据库上查询到上面的测试日志
mysql> SELECT COUNT(*) FROM SystemEvents;
+----------+
| COUNT(*) |
+----------+
|       18 |
+----------+
1 row in set (0.01 sec)

5. 日志管理工具 journalctl

可以只用 journalctl一个命令,查看所有日志(内核日志和应用日志)。

# journalctl命令格式
journalctl [OPTIONS...] [MATCHES...]

--no-full, --full, -l
   如果字段内容超长则以省略号(...)截断以适应列宽。
   默认显示完整的字段内容(超长的部分换行显示或者被分页工具截断)。
   老旧的 -l/--full 选项 仅用于撤销已有的 --no-full 选项,除此之外没有其他用处。
-a, --all
   完整显示所有字段内容, 即使其中包含不可打印字符或者字段内容超长。
-f, --follow
   只显示最新的日志项,并且不断显示新生成的日志项。 此选项隐含了 -n 选项。
-e, --pager-end
   在分页工具内立即跳转到日志的尾部。 此选项隐含了 -n1000
   以确保分页工具不必缓存太多的日志行。 不过这个隐含的行数可以被明确设置的 -n
   选项覆盖。 注意,此选项仅可用于 less(1) 分页器。
-n, --lines=
   限制显示最新的日志行数。 --pager-end 与 --follow 隐含了此选项。
   此选项的参数:若为正整数则表示最大行数; 若为 "all" 则表示不限制行数;
   若不设参数则表示默认值10行。
--no-tail
   显示所有日志行, 也就是用于撤销已有的 --lines= 选项(即使与 -f 连用)。
-r, --reverse
   反转日志行的输出顺序, 也就是最先显示最新的日志。
-o, --output=
   控制日志的输出格式。 可以使用如下选项:
   short
       这是默认值, 其输出格式与传统的 syslog[1] 文件的格式相似, 每条日志一行。
   short-iso
       与 short 类似,只是将时间戳字段以 ISO 8601 格式显示。
   short-precise
       与 short 类似,只是将时间戳字段的秒数精确到微秒级别。
   short-monotonic
       与 short 类似,只是将时间戳字段的零值从内核启动时开始计算。
   short-unix
       与 short 类似,只是将时间戳字段显示为从"UNIX时间原点"(1970-1-1 00:00:00
       UTC)以来的秒数。 精确到微秒级别。
   verbose
       以结构化的格式显示每条日志的所有字段。
    export
       将日志序列化为二进制字节流(大部分依然是文本) 以适用于备份与网络传输(详见
       Journal Export Format[2] 文档)。
   json
       将日志项按照JSON数据结构格式化, 每条日志一行(详见 Journal JSON Format[3]
       文档)。
   json-pretty
       将日志项按照JSON数据结构格式化, 但是每个字段一行, 以便于人类阅读。
   json-sse
       将日志项按照JSON数据结构格式化,每条日志一行,但是用大括号包围, 以适应
       Server-Sent Events[4] 的要求。
    cat
       仅显示日志的实际内容, 而不显示与此日志相关的任何元数据(包括时间戳)--utc
   以世界统一时间(UTC)表示时间
--no-hostname
   不显示来源于本机的日志消息的主机名字段。 此选项仅对 short
   系列输出格式(见上文)有效。
-x, --catalog
   在日志的输出中增加一些解释性的短文本, 以帮助进一步说明日志的含义、
   问题的解决方案、支持论坛、 开发文档、以及其他任何内容。
   并非所有日志都有这些额外的帮助文本, 详见 Message Catalog Developer
   Documentation[5] 文档。
   注意,如果要将日志输出用于bug报告, 请不要使用此选项。
-q, --quiet
   当以普通用户身份运行时, 不显示任何警告信息与提示信息。 例如:"-- Logs begin at
   ...", "-- Reboot --"
-m, --merge
   混合显示包括远程日志在内的所有可见日志。
-b [ID][±offset], --boot=[ID][±offset]
   显示特定于某次启动的日志, 这相当于添加了一个 "_BOOT_ID=" 匹配条件。
   如果参数为空(也就是 ID 与 ±offset 都未指定), 则表示仅显示本次启动的日志。
   如果省略了 ID , 那么当 ±offset 是正数的时候, 将从日志头开始正向查找,
   否则(也就是为负数或零)将从日志尾开始反响查找。 举例来说, "-b
    1"表示按时间顺序排列最早的那次启动, "-b 2"则表示在时间上第二早的那次启动; "-b
    -0"表示最后一次启动, "-b -1"表示在时间上第二近的那次启动, 以此类推。 如果
   ±offset 也省略了, 那么相当于"-b -0", 除非本次启动不是最后一次启动(例如用
    --directory 指定了另外一台主机上的日志目录)。
   如果指定了32字符的 ID , 那么表示以此 ID 所代表的那次启动为基准
   计算偏移量(±offset), 计算方法同上。 换句话说, 省略 ID 表示以本次启动为基准
   计算偏移量(±offset)。
--list-boots
   列出每次启动的 序号(也就是相对于本次启动的偏移量)、32字符的ID、
   第一条日志的时间戳、最后一条日志的时间戳。
-k, --dmesg
   仅显示内核日志。隐含了 -b 选项以及 "_TRANSPORT=kernel" 匹配项。
-t, --identifier=SYSLOG_IDENTIFIER
   仅显示 syslog[1] 识别符为 SYSLOG_IDENTIFIER 的日志项。
   可以多次使用该选项以指定多个识别符。
-u, --unit=UNIT|PATTERN
   仅显示属于特定单元的日志。 也就是单元名称正好等于 UNIT 或者符合 PATTERN
   模式的单元。 这相当于添加了一个 "_SYSTEMD_UNIT=UNIT" 匹配项(对于 UNIT 来说),
   或一组匹配项(对于 PATTERN 来说)。
   可以多次使用此选项以添加多个并列的匹配条件(相当于用"OR"逻辑连接)。
--user-unit=
   仅显示属于特定用户会话单元的日志。 相当于同时添加了 "_SYSTEMD_USER_UNIT=""_UID=" 两个匹配条件。
   可以多次使用此选项以添加多个并列的匹配条件(相当于用"OR"逻辑连接)。
-p, --priority=
   根据日志等级(包括等级范围)过滤输出结果。 日志等级数字与其名称之间的对应关系如下
(参见 syslog(3))"emerg" (0), "alert" (1), "crit" (2), "err" (3),
    "warning" (4), "notice" (5), "info" (6), "debug" (7) 。
   若设为一个单独的数字或日志等级名称, 则表示仅显示小于或等于此等级的日志
   (也就是重要程度等于或高于此等级的日志)。 若使用 FROM..TO.. 设置一个范围,
   则表示仅显示指定的等级范围内(含两端)的日志。 此选项相当于添加了 "PRIORITY="
   匹配条件。
-c, --cursor=
   从指定的游标(cursor)开始显示日志。
   [提示]每条日志都有一个"__CURSOR"字段,类似于该条日志的指纹。
--after-cursor=
   从指定的游标(cursor)之后开始显示日志。 如果使用了 --show-cursor 选项,
   则也会显示游标本身。
--show-cursor
   在最后一条日志之后显示游标, 类似下面这样,以"--"开头:
        -- cursor: s=0639...
   游标的具体格式是私有的(也就是没有公开的规范), 并且会变化。
-S, --since=, -U, --until=
   显示晚于指定时间(--since=)的日志、显示早于指定时间(--until=)的日志。
   参数的格式类似 "2012-10-30 18:17:16" 这样。 如果省略了"时:分:秒"部分,
   则相当于设为 "00:00:00" 。 如果仅省略了"秒"的部分则相当于设为 ":00" 。
   如果省略了"年-月-日"部分, 则相当于设为当前日期。 除了"年-月-日 时:分:秒"格式,
   参数还可以进行如下设置: (1)设为 "yesterday", "today", "tomorrow"
   以表示那一天的零点(00:00:00)(2)设为 "now" 以表示当前时间。
   (3)可以在"年-月-日 时:分:秒"前加上 "-"(前移)"+"(后移)
   前缀以表示相对于当前时间的偏移。 关于时间与日期的详细规范, 参见
   systemd.time(7)
-F, --field=
   显示所有日志中某个字段的所有可能值。 [译者注]类似于SQL语句:"SELECT DISTINCT
   某字段 FROM 全部日志"
-N, --fields
   输出所有日志字段的名称
--system, --user
   仅显示系统服务与内核的日志(--system)、 仅显示当前用户的日志(--user)。
   如果两个选项都未指定,则显示当前用户的所有可见日志。
-M, --machine=
   显示来自于正在运行的、特定名称的本地容器的日志。 参数必须是一个本地容器的名称。
-D DIR, --directory=DIR
   仅显示来自于特定目录中的日志, 而不是默认的运行时和系统日志目录中的日志。
--file=GLOB
   GLOB 是一个可以包含"?""*"的文件路径匹配模式。 表示仅显示来自与指定的 GLOB
   模式匹配的文件中的日志, 而不是默认的运行时和系统日志目录中的日志。
   可以多次使用此选项以指定多个匹配模式(多个模式之间用"OR"逻辑连接)--root=ROOT
   在对日志进行操作时, 将 ROOT 视为系统的根目录。 例如 --update-catalog 将会创建
   ROOT/var/lib/systemd/catalog/database
--new-id128
   此选项并不用于显示日志内容, 而是用于重新生成一个标识日志分类的 128-bit ID 。
   此选项的目的在于 帮助开发者生成易于辨别的日志消息, 以方便调试。
--header
   此选项并不用于显示日志内容, 而是用于显示日志文件内部的头信息(类似于元数据)。
--disk-usage
   此选项并不用于显示日志内容,
   而是用于显示所有日志文件(归档文件与活动文件)的磁盘占用总量。
--vacuum-size=, --vacuum-time=, --vacuum-files=
   这些选项并不用于显示日志内容,
   而是用于清理日志归档文件(并不清理活动的日志文件), 以释放磁盘空间。
    --vacuum-size= 可用于限制归档文件的最大磁盘使用量 (可以使用 "K", "M", "G", "T"
   后缀); --vacuum-time= 可用于清除指定时间之前的归档 (可以使用 "s", "m", "h",
    "days", "weeks", "months", "years" 后缀); --vacuum-files=
   可用于限制日志归档文件的最大数量。 注意,--vacuum-size= 对 --disk-usage
   的输出仅有间接效果, 因为 --disk-usage 输出的是归档日志与活动日志的总量。
   同样,--vacuum-files= 也未必一定会减少日志文件的总数,
   因为它同样仅作用于归档文件而不会删除活动的日志文件。
   此三个选项可以同时使用,以同时从三个维度去限制归档文件。
   若将某选项设为零,则表示取消此选项的限制。
--list-catalog [128-bit-ID...]
   简要列出日志分类信息, 其中包括对分类信息的简要描述。
   如果明确指定了分类ID(128-bit-ID), 那么仅显示指定的分类。
--dump-catalog [128-bit-ID...]
   详细列出日志分类信息 (格式与 .catalog 文件相同)。
   如果明确指定了分类ID(128-bit-ID), 那么仅显示指定的分类。
--update-catalog
   更新日志分类索引二进制文件。
   每当安装、删除、更新了分类文件,都需要执行一次此动作。
--setup-keys
   此选项并不用于显示日志内容, 而是用于生成一个新的FSS(Forward Secure
   Sealing)密钥对。 此密钥对包含一个"sealing key"与一个"verification key""sealing key"保存在本地日志目录中, 而"verification key"则必须保存在其他地方。
   详见 journald.conf(5) 中的 Seal= 选项。
--force
   与 --setup-keys 连用, 表示即使已经配置了FSS(Forward Secure Sealing)密钥对,
   也要强制重新生成。
--interval=
   与 --setup-keys 连用,指定"sealing key"的变化间隔。
   较短的时间间隔会导致占用更多的CPU资源, 但是能够减少未检测的日志变化时间。
   默认值是 15min
--verify
   检查日志文件的内在一致性。 如果日志文件在生成时开启了FSS特性, 并且使用
    --verify-key= 指定了FSS的"verification key",
   那么,同时还将验证日志文件的真实性。
--verify-key=--verify 选项连用, 指定FSS的"verification key"
--sync
   要求日志守护进程将所有未写入磁盘的日志数据刷写到磁盘上,
   并且一直阻塞到刷写操作实际完成之后才返回。 因此该命令可以保证当它返回的时候,
   所有在调用此命令的时间点之前的日志, 已经全部安全的刷写到了磁盘中。
--flush
   要求日志守护进程 将 /run/log/journal 中的日志数据 刷写到 /var/log/journal 中
   (如果持久存储设备当前可用的话)。 此操作会一直阻塞到操作完成之后才会返回,
   因此可以确保在该命令返回时, 数据转移确实已经完成。
   注意,此命令仅执行一个单独的、一次性的转移动作, 若没有数据需要转移,
   则此命令什么也不做, 并且也会返回一个表示操作已正确完成的返回值。
--rotate
   要求日志守护进程滚动日志文件。 此命令会一直阻塞到滚动完成之后才会返回。
-h, --help
   显示简短的帮助信息并退出。
--version
   显示简短的版本信息并退出。
--no-pager
   不将程序的输出内容管道(pipe)给分页程序

6. Logrotate 日志转储

logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,称为日志 转储或滚动。可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行

配置参数 						  	  说明
compress 						 	通过gzip压缩转储以后的日志
nocompress 						 	不压缩
copytruncate 					 	用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate 					 	备份日志文件但是不截断
create mode owner group			 	转储文件,使用指定的权限,所有者,所属组创建新的日志文件
nocreate 				 		 	不建立新的日志文件
errors address 						专储时的错误信息发送到指定的Email 地址
ifempty 							即使是空文件也转储,此为默认选项
notifempty 							如果是空文件的话,不转储
mail address 						把转储的日志文件发送到指定的E-mail 地址
nomail 								转储时不发送日志文件
olddir directory 					转储后的日志文件放入指定目录,必须和当前日志文件在同一个文件系统
noolddir 							转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript 				在转储以前需要执行的命令,这两个关键字必须单独成行
postrotate/endscript 				在转储以后需要执行的命令,这两个关键字必须单独成行
daily 								指定转储周期为每天
weekly 								指定转储周期为每周
monthly 							指定转储周期为每月
rotate count 						指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
tabooext [+] list 					让logrotate不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig,.rpmsave, v, 和 ~
size size 							当日志文件到达指定的大小时才转储,bytes(缺省)及KB或MB
sharedscripts						默认,对每个转储日志运行prerotate和postrotate脚本,日志文件的绝对路径作为第一个参数  								     传递给脚本。 这意味着单个脚本可以针对与多个文件匹配的日志文件条目多次运行(例如
									/var/log/news/*.example)。 如果指定此项sharedscripts,则无论有多少个日志与通配									  符模式匹配,脚本都只会运行一次
nosharedscripts 					针对每一个转储的日志文件,都执行一次prerotate 和 postrotate脚本,此为默认值
missingok 							如果日志不存在,不提示错误,继续处理下一个
nomissingok 						如果日志不存在,提示错误,此为默认值

delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 覆盖 delaycompress 选项,转储同时压缩
					默认,对每个转储日志运行prerotate和postrotate脚本,日志文件的绝对路径作为第一个参数  								     传递给脚本。 这意味着单个脚本可以针对与多个文件匹配的日志文件条目多次运行(例如
								/var/log/news/*.example)。 如果指定此项sharedscripts,则无论有多少个日志与通配									  符模式匹配,脚本都只会运行一次

nosharedscripts 针对每一个转储的日志文件,都执行一次prerotate 和 postrotate脚本,此为默认值
missingok 如果日志不存在,不提示错误,继续处理下一个
nomissingok 如果日志不存在,提示错误,此为默认值

delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 覆盖 delaycompress 选项,转储同时压缩


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1888254.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue为啥监听不了@scroll

哈喽 大家好 我在vue中写了一个滚动scroll监听事件 然后滚动鼠标 发现进不来我的方法断点 原因: 事件绑定错误:确保你使用scroll正确绑定到了可滚动容器上。 事件冒泡:滚动事件可能被封装在某些组件内部,导致不会冒泡到父元素上…

背景图的动效,非常的炫酷,非一般的感觉。

我们都知道在一些展示型项目中,背景图加上动效后,可以立马让整个设计档次提升了,这次带来了一批背景图的动效图,大家看一下。

Web 基础与 HTTP 协议

Web 基础与 HTTP 协议 一、Web 基础1.1域名和 DNS域名的概念Hosts 文件DNS(Domain Name System 域名系统)域名注册 1.2网页与 HTML网页概述HTML 概述网站和主页Web1.0 与 Web2.0 1.3静态网页与动态网页静态网页动态网页 二、HTTP 协议1.1HTTP 协议概述1.…

3115.力扣每日一题7/2 Java

博客主页:音符犹如代码系列专栏:算法练习关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 目录 思路 解题方法 时间复杂度 空间复杂度 Code 总结 思路 这道题的…

SpringBoot+mail 轻松实现各类邮件自动推送

一、简介 在实际的项目开发过程中,经常需要用到邮件通知功能。例如,通过邮箱注册,邮箱找回密码,邮箱推送报表等等,实际的应用场景非常的多。 早期的时候,为了能实现邮件的自动发送功能,通常会…

android iconfont带图标的图文并茂的一种实现

android实现图文并茂方法很多。 这里针对,仅本地图标,需要对齐,任意位置,兼容换行导致后面空白的问题做的一种方案。 www.iconfont.cn,注册; 上传svg的icon; 下载项目得到iconfont.ttf&#xf…

泰雷茲具有首个通过FIPS 140-3 三级认证的HSMs

泰雷兹LunaHsm是业界首款通过FIPS140-33级认证的解决方案,安策引进泰雷兹HSM产品可以帮助您满足您的数据安全合规性需求,阻力企业提高竞争力。 安策提供泰雷茲ThalesLunaHSMs成为首个通过FIPS140-3三级认证的硬件安全模块图 我们很高兴地宣布&#xff0c…

Java 汉诺塔问题 详细分析

汉诺塔 汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小…

Ignis 应用: 社交 + 游戏 + 工业4.0,Ignis 构建Web3生态圈

引言 在数字经济快速发展的今天,Web3技术为我们带来了前所未有的变革。作为Ardor平台的主要子链,Ignis公链在推动Web3生态系统建设中扮演了重要角色。本文将通过介绍Vessel Chain、Mythical Beings和Bridge Champ等应用,探讨Ignis公链如何通…

Android原生与flutter模块交互

Flutter定义了三种不同类型的Channel: BasicMessageChannel:用于传递字符串和半结构化的信息,持续通信,收到消息后可以回复此次消息,如:Native将遍历到的文件信息陆续传递到Dart,在比如&#xf…

【Python机器学习系列】建立决策树模型预测小麦品种(案例+源码)

这是我的第314篇原创文章。 一、引言 对于表格数据,一套完整的机器学习建模流程如下: 针对不同的数据集,有些步骤不适用,其中橘红色框为必要步骤,欢迎大家关注翻看我之前的一些相关文章。前面我介绍了机器学习模型的二…

MySQL 9.0 发布了!

从昨晚开始,在DBA群里大家就在讨论MySQL 9.0发布的事情,但是Release Note和官方文档都没有更新,所以今天早上一上班就赶紧瞅了下具体更新了哪些内容? 整体看来,基本没什么创新。下面是9.0新增或废弃的一些特性。 &…

自动批量将阿里云盘文件发布成WordPress文章脚本源码(以RiPro主题为例含付费信息下载地址SEO等自动设置)源码

背景 很多资源下载站,付费资源下载站,付费内容查看等都可以用WordPress站点发布内容,这些站点一般会基于一个主题,付费信息作为文章附属的信息发布,底层存储在WP表里,比如日主题,子比主题等。 …

计算机是如何看到图像的

本节课为「计算机视觉 CV 核心知识」第 4 节; 「AI秘籍」系列课程: 人工智能应用数学基础人工智能Python基础人工智能基础核心知识人工智能BI核心知识人工智能CV核心知识 本文涉及代码:https://github.com/hivandu/AI_Cheats Hi, 大家好。我…

【MySQL备份】Percona XtraBackup压缩备份实战篇

目录 1.前言 2.准备工作 2.1.环境信息 2.2.配置/etc/my.cnf文件 2.3.授予root用户BACKUP_ADMIN权限 2.4.安装qpress 3. 压缩备份 3.1.创建压缩备份 3.2.创建全量备份 3.3.对比两个备份的大小 4.解压备份 5.准备备份 6.备份恢复 ​7.问题分析 8.总结 "实战…

网络连接之队头阻塞!!!

一、什么是队头阻塞 队头阻塞,在网络模型中简单理解就是,对于队列型的请求模型,如HTTP的请求-响应模型、TCP的ACK确认机制,都依赖得到一个具体的响应包,如果收不到这个响应包,那下一个请求就不能发&#x…

太阳辐射系统日光全光谱模拟太阳光模拟器

太阳光模拟器是一种用于评估太阳能电池性能的重要设备。它能够模拟太阳光的特性,通过测试电池的短路电流、开路电压、填充因子和光电转化效率等关键指标,来评估电池的性能优劣。 设备型号:KYF-GC004品牌制造商:科迎法电气太阳光模…

08 docker Registry搭建docker私仓

目录 本地镜像发布流程 1. docker pull registry 下载镜像 2. docker run 运行私有库registry 3. docker commit 构建镜像 4. docker tag 修改新镜像,使之符合私服规范tag 5. 修改配置文件使之支持http 6. curl验证私服库上有什么镜像 7. push推送 pull拉取 …

C# WPF自制批注工具(方便标记重点和演示)

在教学和演示中,我们通常需要对重点进行批注,下载安装第三方工具批注显得很麻烦。本篇使用WPF开发了一个批注工具,工具小巧,功能丰富,非常使用日常免费使用,或者进行再次开发。 自制批注工具具有以下功能特…

构建 Audio Unit 的流程

构建 Audio Unit 的流程 构建 Audio Unit 的流程指定 Audio Unit 的类型创建 Audio Unit设置 Audio Unit 的属性 构建 Audio Unit 的流程 iOS 有一个用于直接处理 audio units 的 API,另一个用于处理 audio processing graphs,可以同时使用这两种 API。…