【ELK使用指南 2】常用的 Logstash filter 插件详解(附应用实例)

Logstash filter

  • 一、logstash filter过滤插件的常用模块简介
  • 二、grok 正则捕获插件
    • 2.1 grok插件的作用
    • 2.2 内置正则表达式
    • 2.3 自定义正则表达式
  • 三、mutate 数据修改插件
    • 3.1 mutate插件的作用
    • 3.2 常用的配置选项
    • 3.3 mutate插件应用实例
  • 四、multiline 多行合并插件
    • 4.1 multiline插件的作用
    • 4.2 常用配置项
    • 4.3 multiline插件应用实例
      • Step1 安装multiline插件
      • Step2 使用multiline插件
  • 五、date 时间处理插件
    • 5.1 date插件的作用
    • 5.2 常用的配置项
    • 5.3 date插件应用实例

一、logstash filter过滤插件的常用模块简介

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Logstash 中的 filter 模块用于对输入的数据进行处理和转换

它提供了多个插件,可以根据需要选择适当的插件来应用于数据流。

常见的 Logstash filter 插件包括:

  1. grok:用于将非结构化的日志数据解析为结构化的数据。它使用自定义的正则表达式模式匹配和提取字段。
  2. mutate:用于修改事件中的字段,例如重命名字段、删除字段、添加字段、替换字段值等。
  3. date:用于解析日期和时间字段,并将其转换为特定的格式。
  4. geoip:根据 IP 地址解析并添加地理位置信息字段,例如国家、省份、城市等。
  5. dns:根据域名解析并添加 IP 地址信息字段,例如解析主机名到 IP 地址。
  6. json:用于解析和格式化 JSON 数据。
  7. csv:用于解析和格式化 CSV 数据。
  8. grokdiscovery:用于动态生成 grok 模式,这对于处理多种日志格式非常有用。

二、grok 正则捕获插件

2.1 grok插件的作用

将大文本字段分片成若干个小字段

2.2 内置正则表达式

内置正则格式:%{内置正则表达式:小字段名}

1.举个例子,用内置正则匹配消息记录

192.168.80.10 GET /index.html 15824 0.043%{IP:client_id_address} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:http_response_time}
登录kibana,进入Grok Debugger界面

在这里插入图片描述

2.官方提供的常量

Logstash 官方也给了一些常用的常量来表达那些正则表达式.

地址:https://github.com/logstash-plugins/logstash-patterns-core/blob/main/patterns/ecs-v1/grok-patterns

USERNAME [a-zA-Z0-9._-]+
USER %{USERNAME}
EMAILLOCALPART [a-zA-Z][a-zA-Z0-9_.+-=:]+
EMAILADDRESS %{EMAILLOCALPART}@%{HOSTNAME}
INT (?:[+-]?(?:[0-9]+))
BASE10NUM (?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+)))
NUMBER (?:%{BASE10NUM})
BASE16NUM (?<![0-9A-Fa-f])(?:[+-]?(?:0x)?(?:[0-9A-Fa-f]+))
BASE16FLOAT \b(?<![0-9A-Fa-f.])(?:[+-]?(?:0x)?(?:(?:[0-9A-Fa-f]+(?:\.[0-9A-Fa-f]*)?)|(?:\.[0-9A-Fa-f]+)))\bPOSINT \b(?:[1-9][0-9]*)\b
NONNEGINT \b(?:[0-9]+)\b
WORD \b\w+\b
NOTSPACE \S+
SPACE \s*
DATA .*?
GREEDYDATA .*
QUOTEDSTRING (?>(?<!\\)(?>"(?>\\.|[^\\"]+)+"|""|(?>'(?>\\.|[^\\']+)+')|''|(?>(?>\\.|[^\\]+)+)|))
UUID [A-Fa-f0-9]{8}-(?:[A-Fa-f0-9]{4}-){3}[A-Fa-f0-9]{12}
# URN, allowing use of RFC 2141 section 2.3 reserved characters
URN urn:[0-9A-Za-z][0-9A-Za-z-]{0,31}:(?:%[0-9a-fA-F]{2}|[0-9A-Za-z()+,.:=@;$_!*'/?#-])+# Networking
MAC (?:%{CISCOMAC}|%{WINDOWSMAC}|%{COMMONMAC})
CISCOMAC (?:(?:[A-Fa-f0-9]{4}\.){2}[A-Fa-f0-9]{4})
WINDOWSMAC (?:(?:[A-Fa-f0-9]{2}-){5}[A-Fa-f0-9]{2})
COMMONMAC (?:(?:[A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2})
IPV6 ((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?
IPV4 (?<![0-9])(?:(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]))(?![0-9])
IP (?:%{IPV6}|%{IPV4})
HOSTNAME \b(?:[0-9A-Za-z][0-9A-Za-z-]{0,62})(?:\.(?:[0-9A-Za-z][0-9A-Za-z-]{0,62}))*(\.?|\b)
IPORHOST (?:%{IP}|%{HOSTNAME})
HOSTPORT %{IPORHOST}:%{POSINT}# paths
PATH (?:%{UNIXPATH}|%{WINPATH})
UNIXPATH (/([\w_%!$@:.,+~-]+|\\.)*)+
TTY (?:/dev/(pts|tty([pq])?)(\w+)?/?(?:[0-9]+))
WINPATH (?>[A-Za-z]+:|\\)(?:\\[^\\?*]*)+
URIPROTO [A-Za-z]([A-Za-z0-9+\-.]+)+
URIHOST %{IPORHOST}(?::%{POSINT:port})?
# uripath comes loosely from RFC1738, but mostly from what Firefox
# doesn't turn into %XX
URIPATH (?:/[A-Za-z0-9$.+!*'(){},~:;=@#%&_\-]*)+
#URIPARAM \?(?:[A-Za-z0-9]+(?:=(?:[^&]*))?(?:&(?:[A-Za-z0-9]+(?:=(?:[^&]*))?)?)*)?
URIPARAM \?[A-Za-z0-9$.+!*'|(){},~@#%&/=:;_?\-\[\]<>]*
URIPATHPARAM %{URIPATH}(?:%{URIPARAM})?
URI %{URIPROTO}://(?:%{USER}(?::[^@]*)?@)?(?:%{URIHOST})?(?:%{URIPATHPARAM})?# Months: January, Feb, 3, 03, 12, December
MONTH \b(?:[Jj]an(?:uary|uar)?|[Ff]eb(?:ruary|ruar)?|[Mm](?:a|ä)?r(?:ch|z)?|[Aa]pr(?:il)?|[Mm]a(?:y|i)?|[Jj]un(?:e|i)?|[Jj]ul(?:y)?|[Aa]ug(?:ust)?|[Ss]ep(?:tember)?|[Oo](?:c|k)?t(?:ober)?|[Nn]ov(?:ember)?|[Dd]e(?:c|z)(?:ember)?)\b
MONTHNUM (?:0?[1-9]|1[0-2])
MONTHNUM2 (?:0[1-9]|1[0-2])
MONTHDAY (?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9])# Days: Monday, Tue, Thu, etc...
DAY (?:Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?|Sun(?:day)?)# Years?
YEAR (?>\d\d){1,2}
HOUR (?:2[0123]|[01]?[0-9])
MINUTE (?:[0-5][0-9])
# '60' is a leap second in most time standards and thus is valid.
SECOND (?:(?:[0-5]?[0-9]|60)(?:[:.,][0-9]+)?)
TIME (?!<[0-9])%{HOUR}:%{MINUTE}(?::%{SECOND})(?![0-9])
# datestamp is YYYY/MM/DD-HH:MM:SS.UUUU (or something like it)
DATE_US %{MONTHNUM}[/-]%{MONTHDAY}[/-]%{YEAR}
DATE_EU %{MONTHDAY}[./-]%{MONTHNUM}[./-]%{YEAR}
ISO8601_TIMEZONE (?:Z|[+-]%{HOUR}(?::?%{MINUTE}))
ISO8601_SECOND (?:%{SECOND}|60)
TIMESTAMP_ISO8601 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?
DATE %{DATE_US}|%{DATE_EU}
DATESTAMP %{DATE}[- ]%{TIME}
TZ (?:[APMCE][SD]T|UTC)
DATESTAMP_RFC822 %{DAY} %{MONTH} %{MONTHDAY} %{YEAR} %{TIME} %{TZ}
DATESTAMP_RFC2822 %{DAY}, %{MONTHDAY} %{MONTH} %{YEAR} %{TIME} %{ISO8601_TIMEZONE}
DATESTAMP_OTHER %{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{TZ} %{YEAR}
DATESTAMP_EVENTLOG %{YEAR}%{MONTHNUM2}%{MONTHDAY}%{HOUR}%{MINUTE}%{SECOND}# Syslog Dates: Month Day HH:MM:SS
SYSLOGTIMESTAMP %{MONTH} +%{MONTHDAY} %{TIME}
PROG [\x21-\x5a\x5c\x5e-\x7e]+
SYSLOGPROG %{PROG:program}(?:\[%{POSINT:pid}\])?
SYSLOGHOST %{IPORHOST}
SYSLOGFACILITY <%{NONNEGINT:facility}.%{NONNEGINT:priority}>
HTTPDATE %{MONTHDAY}/%{MONTH}/%{YEAR}:%{TIME} %{INT}# Shortcuts
QS %{QUOTEDSTRING}# Log formats
SYSLOGBASE %{SYSLOGTIMESTAMP:timestamp} (?:%{SYSLOGFACILITY} )?%{SYSLOGHOST:logsource} %{SYSLOGPROG}:# Log Levels
LOGLEVEL ([Aa]lert|ALERT|[Tt]race|TRACE|[Dd]ebug|DEBUG|[Nn]otice|NOTICE|[Ii]nfo|INFO|[Ww]arn?(?:ing)?|WARN?(?:ING)?|[Ee]rr?(?:or)?|ERR?(?:OR)?|[Cc]rit?(?:ical)?|CRIT?(?:ICAL)?|[Ff]atal|FATAL|[Ss]evere|SEVERE|EMERG(?:ENCY)?|[Ee]merg(?:ency)?)

2.3 自定义正则表达式

自定义正则格式:(?<小字段名>自定义正则表达式)

#举个例子
#目标消息记录
192.168.80.11 - - [14/Oct/2023:11:53:02 +0800] "GET /jxl.html HTTP/1.1" 200 17 "-" "curl/7.29.0" "-"#按照以下格式显示"remote_addr": "response_code": "http_method": "refer_url": "http_version": "request_uri": "user_agent": "access_time": #使用的正则表达式
%{IP:remote_addr} - - \[(?<access_time>.+)\] \"%{WORD:http_method} %{URIPATHPARAM:request_uri} (?<http_version>.+)\" %{NUMBER:response_code} [0-9]+ \"(?<refer_url>.+)\" \"(?<user_agent>.+)\" .*

在这里插入图片描述

三、mutate 数据修改插件

3.1 mutate插件的作用

对Logstash收集的日志事件字段进行格式化处理。

3.2 常用的配置选项

配置选项功能
rename重命名字段名
add_field添加字段
remove_field删除字段
replace替换字段的值
gsub修改字段值的字符
convert修改字段值的数据类型

3.3 mutate插件应用实例

#将字段old_field重命名为new_field
filter {mutate {#写法1,使用中括号括起来rename => ["old_field" => "new_field"]#写法2,使用大括号{}括起来rename => { "old_field" => "new_field" }		}
}#添加字段
filter {mutate {add_field => {"f1" => "field1""f2" => "field2"}}
}#将字段删除
filter {mutate {remove_field  =>  ["message", "@version", "tags"]}
}#将filedName1字段数据类型转换成string类型,filedName2字段数据类型转换成float类型
filter {mutate {#写法1,使用中括号括起来convert  =>  ["filedName1", "string"]#写法2,使用大括号{}括起来convert => { "filedName2" => "float" }}
}#将filedName字段中所有"/“字符替换为”_"
filter {mutate {gsub => ["filedName", "/" , "_"]}
}#将filedName字段中所有",“字符后面添加空格
filter {mutate {gsub => ["filedName", "," , ", "]}
}#将filedName字段以"|"为分割符拆分数据成为数组
filter {mutate {split => ["filedName", "|"]}
}#合并 “filedName1” 和 “ filedName2” 两个字段
filter {merge  { "filedName2" => "filedName1" }
}#用新值替换filedName字段的值
filter {mutate {replace => { "filedName" => "new_value" }}
}#添加字段first,值为message数组的第一个元素的值
filter {mutate {split => ["message", "|"]add_field => {"first" => "%{[message][0]}"    } }
}#有条件的添加标签
filter {#在日志文件路径包含 access 的条件下添加标签内容if [path] =~ "access" {mutate {add_tag => ["Nginx Access Log"]}}#在日志文件路径是 /var/log/nginx/error.log 的条件下添加标签内容if [path] == "/var/log/nginx/error.log" {mutate {add_tag => ["Nginx Error Log"]}}
}

四、multiline 多行合并插件

4.1 multiline插件的作用

将多行日志内容合并成一整行

4.2 常用配置项

在这里插入图片描述

pattern:通过正则表达式匹配行内容。

在这里插入图片描述

negate

false:不取反,表示正则匹配的行做合并操作。

true:取反,表示正则不匹配的行做合并操作。
在这里插入图片描述

what

previous表示向上合并

next表示向下合并

4.3 multiline插件应用实例

Step1 安装multiline插件

方式一:在线安装

cd /usr/share/logstashbin/logstash-plugin install logstash-filter-multiline

方式二:离线安装

先在有网的机器上在线安装插件,然后打包,拷贝到服务器,执行安装命令。

bin/logstash-plugin prepare-offline-pack --overwrite --output logstash-filter-multiline.zip logstash-filter-multilinebin/logstash-plugin install file:///usr/share/logstash/logstash-filter-multiline.zip

Step2 使用multiline插件

第一步:每一条日志的第一行开头都是一个时间,可以用时间的正则表达式匹配到第一行

第二步:然后将后面每一行的日志与第一行合并

第三步:当遇到某一行的开头是可以匹配正则表达式的时间的,就停止第一条日志的合并,开始合并第二条日志;

第四步:重复第二步和第三步。

filter {multiline {pattern => "^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}.\d{3}"negate => truewhat => "previous"}
}

在这里插入图片描述

五、date 时间处理插件

5.1 date插件的作用

将Logstash收集的日志事件时间@timestamp日志实际的时间进行格式统一。

需要先配置grok插件模块获取日志时间的小字段

5.2 常用的配置项

在这里插入图片描述

match:用于配置具体的匹配内容规则

前半部分内容表示匹配实际日志当中的时间戳的名称,后半部分则用于匹配实际日志当中的时间戳格式

这个地方是整条配置的核心内容,如果此处规则匹配是无效的,则生成后的日志时间戳将会被input插件读取的时间替代。

如果时间格式匹配失败,会生成一个tags字段,字段值为 _dateparsefailure,需要重新检查上边的match配置解析是否正确。

在这里插入图片描述

target将匹配的时间戳存储到给定的目标字段中

如果未提供,则默认更新事件的@timestamp字段。
在这里插入图片描述

timezone:当需要配置的date里面没有时区信息,而且不是UTC时间,需要设置timezone参数。

5.3 date插件应用实例

#新建子配置文件,用于测试
vim  /etc/logstash/conf.d/test.conf#在filter块中,启用date插件
filter {date {match => ["access_time", "dd/MMM/YYYY:HH:mm:ss Z", "UNIX", "yyyy-MM-dd HH:mm:ss", "dd-MMM-yyyy HH:mm:ss"]target => "@timestamp"timezone => "Asia/Shanghai"}

在这里插入图片描述

#运行配置文件
#还需要启动filebeat收集日志,这里不再赘述
logstash -f test.conf然后登录到kibana,查看视图的变化

在这里插入图片描述

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

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

相关文章

Unity之ShaderGraph如何实现马赛克效果

前言 今天我们来实现一个马赛克的效果 如下所示&#xff1a; 关键节点 Posterize&#xff1a;色调分离节点 图像的色调分离或色调分离需要将色调的连续渐变转换为色调较少的几个区域&#xff0c;并从一种色调突然改变为另一种色调。 原理 原理就是通过色调分离节点&…

yolov5多个框重叠问题

NMS&#xff08;Non-Maximum Suppression&#xff0c;非极大值抑制&#xff09;是一种在计算机视觉和目标检测领域常用的技术。它通常用于在图像或视频中找出物体或目标的位置&#xff0c;并剔除重叠的边界框&#xff0c;以确保最终的检测结果准确且不重叠。 会出现多个框重叠…

互联网Java工程师面试题·Java 总结篇·第十弹

目录 82、JDBC 能否处理 Blob 和 Clob&#xff1f; 83、简述正则表达式及其用途。 84、Java 中是如何支持正则表达式操作的&#xff1f; 85、获得一个类的类对象有哪些方式&#xff1f; 86、如何通过反射创建对象&#xff1f; 87、如何通过反射获取和设置对象私有字段的值…

Unity之ShaderGraph如何实现无贴图水球效果

前言 我们今天来实现一个无贴图水球效果&#xff0c;如下图所示&#xff1a; 主要节点 UVSplit&#xff1a;可以获得UV在RGB三个颜色分别的分量 Remap&#xff1a;重映射节点 基于输入 In 值在输入In Min Max的 x 和 y 分量之间的线性插值&#xff0c;返回输入Out Min Max…

【发布】Photoshop ICO 文件格式插件 3.0

备注&#xff1a;本文原文首发于博客园&#xff1a; https://www.cnblogs.com/hoodlum1980/p/17766287.html 【简介】 Photoshop ICO 插件是为 Photoshop 开发的功能扩展插件&#xff0c;使得 Photoshop 可以直接读写 ICO 格式文件。由于 Photoshop 具有强大的像素位图编辑功…

android studio打开flutter项目报红

一、android studio打开flutter项目报红&#xff0c;如下图&#xff1a; 二、解决方法&#xff1a; 2.1 在这个build.gradle添加以下代码&#xff0c;如图&#xff1a; 2.2 在build.gradle最顶部添加如下代码&#xff1a; def localProperties new Properties() def localPr…

使用Gitlab构建简单流水线CI/CD

什么是Gitlab Gitlab实质上是一套DevOps工具 目前看起来&#xff0c;Gitlab属于是内嵌了一套CI/CD的框架&#xff0c;并且可以提供软件开发中的版本管理、项目管理等等其他功能。 这里需要辨别一下Gitlab和Github Gitee的区别。 GIthub大家都很熟悉了&#xff0c;一般大家都会…

Mac苹果电脑开不了机怎么办,该怎么修复

台式机Mac或MacBook无法打开&#xff0c;或者可能无法通过Apple图标启动&#xff1f;不用担心&#xff0c;虽然会让人烦躁不安&#xff0c;但通常是可以修复的。 以下就是重新启动Mac所需的所有步骤。只需按顺序进行操作即可&#xff0c;除非操作系统更新失败后Mac无法启动。在…

【已解决】java的gradle项目报错org.gradle .api.plugins .MavenPlugin

我的java的gradle项目经常报错org.gradle .api.plugins .MavenPlugin。报错这个问题是因为依赖起冲突了&#xff0c;我在网上试了很多方法都没有效果&#xff0c;折让小编我很是苦恼&#xff0c;不过还好到最后问题还是解决了。 首先要知道你的项目所使用的gradle版本&#xf…

ES6 Proxy和Reflect

1.Proxy是什么&#xff1f; Proxy 对象用于创建一个对象的代理&#xff0c;从而实现基本操作的拦截和自定义&#xff08;如属性查找、赋值、枚举、函数调用等&#xff09;。属于“元编程”&#xff0c;即对编程语言进行编程。 如对对象a进行拦截就 let p new Proxy(obj,hand…

LeetCode 799. 香槟塔【数组,模拟,简单线性DP】1855

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

开源OA协同办公系统,集成Flowable流程引擎 可拖拽创建个性表单

源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/88403340 源码下载2&#xff1a; 关注我留言 开源OA协同办公系统&#xff0c;集成Flowable流程引擎 可拖拽创建个性表单。基于RuoYi-VUE版本开发。 1、使用RuoYi-Vue的基础上开发。 2、集成flowable&a…

ubuntu 20.04 passwd 指令不能使用

Linux 更改用户密码报Changing password for user 用户名. passwd: Module is unknown或更改新增用户密码passwd&#xff1a;未知的用户名 报错信息如下&#xff1a; 解决方法&#xff1a; 可以排查 /etc/pam.d/passwd配置文件 注释掉包含pam_passwdqc.so模块的行&#xff0c…

.NET开源且免费的Windows远程桌面管理软件

前言 今天要给大家推荐一款由.NET开源且免费的远程桌面管理软件&#xff1a;1Remote。 1Remote官方项目介绍 1Remote是一款现代的远程会话管理和启动器&#xff0c;它让你能够在任何时候快速开启一个远程会话。目前1Remote已支持 微软远程桌面(RDP)、VNC、SSH、Telnet、SFTP、…

Hadoop3教程(二十四):Yarn的常用命令与参数配置实例

文章目录 &#xff08;132&#xff09;YARN常用命令查看任务查看日志查看容器查看节点状态rmadmin更新配置查看队列 &#xff08;133&#xff09;生产环境核心配置参数&#xff08;135&#xff09;生产环境核心参数配置案例&#xff08;140/141&#xff09;Tool接口案例参考文献…

企业IT资产设备折旧残值如何计算

环境&#xff1a; 企业/公司 IT资产 问题描述&#xff1a; 企业IT设备折旧残值如何计算&#xff1f; 解决方案&#xff1a; 1.按三年折旧 净值原值-月折旧额折旧月份 &#xff0c; 月折旧额原值(1-3%)/36 折旧月份ROUND(E2*(1-3%)/36,2) 2.净值E2-F2*G2

彩虹商城知识付费程序

1&#xff0c;下载程序&#xff0c; 2.宝塔新建站点&#xff0c;&#xff0c;自己的域名直接用&#xff08;别忘记解析了&#xff09;教程直接用IP测试。。 3.上传你下载的压缩包&#xff08;这里暂停一下&#xff0c;传好了继续&#xff09;有点慢等不了了&#xff0c; 4.上传…

C语言中的3种注释方法

C语言中的3种注释方法 2021年8月28日星期六席锦 在用C语言编程时&#xff0c;常用的注释方式有如下几种&#xff1a; (1)单行注释 // … (2)多行注释 /* … */ (3)条件编译注释 #if 0…#endif (1)(2)在入门教程中比较常见。 对于(1) 【单行注释 // …】&#xff0c;注释只能显示…

【VR】【Unity】如何调整Quest2的隐藏系统时间日期

【背景】 网络虽然OK&#xff0c;但是Oculus Quest要连上商店还必须调整好系统时间&#xff0c;不过在Quest系统中&#xff0c;时间对用户是不可见的&#xff0c;本篇介绍调整的方法。 【方法】 打开SideQuest&#xff0c;没有的话先去下载一个。打开后先登录&#xff0c;如…

安装宝塔面板(详细教程)

一、简介 宝塔面板是一款简单好用的服务器运维面板。它支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能。对于新手用云服务器来建站的话&#xff0c;宝塔面板是一个非常好用的工具。 宝塔官网&#xff1a;https://www.bt.cn/new/index.html 二、宝…