Logstash完成ELK集群

2023-05-16

注:本文与同步(9条消息) 搭建Elasticsearch和kibana完成初步ELK日志分析平台搭建_kali_yao的博客-CSDN博客

logstash搭建

1)logstash介绍

什么是logstash

-是一个数据采集、加工处理以及传输的工具

特点

-所有类型的数据集中处理

-不同模式和格式数据的正常化

-自定义日志格式的迅速扩展

-为自定义数据源轻松添加插件

Logstash工作结构(与流水线类似)

{数据源} ==> input{} ==> filter{ } ==> output {} ==>{输出结果}

- input 负责收集数据

-filter负责处理数据

-output负责输出数据

logstash 里面的类型

-布尔值类型: ssI_ enable => true

-字节类型: bytes =>1MiB"

-字符串类型: name => " xkops'

-数值类型: port => 22

-数组: match => [" datetime", "UNIX"]

-哈希(键值对) : options => {k => "v",k2 => "v2"}

-注释: #

logstash 里面的判断语法

-等于: ==

-不等于: !=

-小于: <

-大于: >

-小于等于: <=

-大于等于: >=

-匹配正则:-不匹配正则: !

logstash 里面的逻辑判断

-包含: in

-不包含: notin

-与: and

-或: or

-非与: nand

-非或: xor

其他

-编码类型: codec => "json'

2)logstash安装

logstash安装概述

-ogstash依赖Java环境,需要安装java-openjdk

-logstash没有默认的配置文件,需要手动配置

-logstash安装在/usr/share/logstash 目录下

配置好yum源以后直接使用yum进行安装或手动下载logstash

~]# wget https://artifacts.elastic.co/downloads/logstash/logstash-6.8.8.rpm
~]# yum install -y java-1.8.0-openjdk logstash

img

logstash安装准备

主机配置

主机IP地址配置
logstash192.168.1.47最低配置2核2G

logstash基础配置安装

# 注需于前面的配置elasticsearch对应
~]# vim /etc/hosts
192.168.1.41    es-0001
192.168.1.42    es-0002
192.168.1.43    es-0003
192.168.1.44    es-0004
192.168.1.45    es-0005
192.168.1.47    logstash
~]# yum install -y java-1.8.0-openjdk logstash
# 默认安装在/usr/share/logstash/bin/logstash
~]# cd /usr/share/logstash/bin/ && ls

注: /usr/share/logstash/bin/logstash直接执行会报错没找到配置文件

# 服务配置文件默认一般在/etc下
~]# ln -s /etc/logstash /usr/share/logstash/config
~]# vim /etc/logstash/conf.d/my.conf
input {
  stdin {}
}
​
filter{ }
​
output{
  stdout{}
}
~]# /usr/share/logstash/bin/logstash

 做完软连接之后直接启动会告诉我没没用配置文件,(配置文件需要自己书写,如上)

 注:启动后进入交互视,输入任意测试,回应json格式

 

ctrl + c退出

3)插件的使用

logstash 配置文件路径

-logstash安装路径/usr/share/ logstash (默认路径)

-配置文件安装路径/etc/logstash

●启动命令logstash

/usr/share/ logstash/bin/logstash

插件的管理

  • 使用插件

-面的配置文件使用了logstash-input-stdin 和

logstash-output- -stdout两个插件,logstash对数据的处理依赖插件

  • 管理命令/usr/share/ logstash/bin/ logstash-plugin

-安装插件install

-删除插件uninstall

-查看插件list

~]# cd /usr/share/logstash/bin
~]# ./logstash-plugin list
# 注:同一种插件只能工作在同一个工作区里

  

 

  • 只能用于input段的插件: Iogstash-input- -xxx

  • 只能用于output段的插件: logstash-output- -xxx

  • 只能用于filter段的插件: logstash-filter-xxx,

  • 编码格式插件: logstash-codec-xxx

插件与调试格式

/usr/share/logstash/bin/logstash-plugin list #查看所有

使用json格式字符串测试 {"a":"1", "b":"2", "c":"3"}

# 注:当没有输入格式之前所有的输入都会打印成普通字符串
~]# vim /etc/logstash/conf.d/my.conf
input { 
  stdin { codec => "json" }  # 以json格式打印
}
​
filter{ }
​
output{ 
  stdout{ codec => "rubydebug" } #调试格式
}
~]# /usr/share/logstash/bin/logstash
[2021-09-09T10:28:49,544][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}
 {"a":"1", "b":"2", "c":"3"} # 输入
/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/awesome_print-1.7.0/lib/awesome_print/formatters/base_formatter.rb:31: warning: constant ::Fixnum is deprecated
{
      "@version" => "1",
             "c" => "3",
          "host" => "logstash",
    "@timestamp" => 2021-09-09T02:28:52.117Z,
             "b" => "2",
             "a" => "1"
}

服务启动报错(由于上一个服务关闭进程没有关闭则需要关闭上一个进程)

此时普通的查进程以经不能解决

~]# ps -exf | grep logstash
# 因为logstash是java启动的,这边安装一个java的命令工具查找并杀死
~]# yum install java-1.8.0-openjdk-devel
~]# jps
629 WrapperSimpleApp
2078 Jps
~]# kill 2078

4)插件官方手策使用

官方手册地址

Logstash Reference [8.0] | Elastic

注:这里我用的是6.8

下面三个模式任选一个我这里演示input

img

这里演示file文件

img

找到path这一行点array有案例

img

案例可以直接使用

img

查看使用规则

img

5)input file插件(文件插件)

~]# vim /etc/logstash/conf.d/my.conf
input { 
  stdin { codec => "json" }
  file {
    path => ["/tmp/b.log","/tmp/c.log"]        # 指定监控的文件当有多条的时候加[]
    type => "test"   # 指定标签,如果是apache的日志可以打上apache
    start_position => "beginning" # 开始,如果不写的话在启动服务之前的数据不会打印      
    sincedb_path => "/var/lib/logstash/sincedb"  # 书签文件
  }
   file {              # 或者可以支持多个file书写
    path => "/tmp/d.log"
    type => "mysql"
  }
}
​
}
filter{ }
output{ 
  stdout{ codec => "rubydebug" }
}
~]# rm -rf /var/lib/logstash/plugins/inputs/file/.sincedb_* 
# 删除原有书签文件,这样就可以重头开始输出了
~]# /usr/share/logstash/bin/logstash

写入数据测试

~]# cd /tmp
~]# echo aaa >>a.log
~]# echo bbb >>a.log
~]# /usr/share/logstash/bin/logstash
....
/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/awesome_print-1.7.0/lib/awesome_print/formatters/base_formatter.rb:31: warning: constant ::Fixnum is deprecated
{
       "message" => "aaa",
      "@version" => "1",
    "@timestamp" => 2021-09-09T03:57:10.178Z,
          "host" => "logstash",
          "type" => "test",
          "path" => "/tmp/c.log"
}
{
       "message" => "bbb",
      "@version" => "1",
    "@timestamp" => 2021-09-09T03:57:10.200Z,
          "host" => "logstash",
          "type" => "test",
          "path" => "/tmp/c.log"

官网查看解析

 

 

 

6)web页面展示

# 浏览器访问apache服务的ip(之前有写)
~]# http://172.17.0.51/info.php

查看日志

~]# tail -f /etc/httpd/logs/access_log
172.17.0.126 - - [07/Mar/2022:11:42:03 +0800] "GET /info.php HTTP/1.1" 200 279 "-" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36"
​
# 第一个字段是ip,发现不是本机ip访问的

默认在云上访问使用的是LB负载ip

 设置监听服务器时打开获取真实ip

 

测试,把apache的日志拷贝到/tmp/b.log中,启动查看

此时发现只要再次启动就不会打印输出了,因为有标签,

 修改标签指定文件或删除标签文件

 

 

7)filter(过滤) grok插件

1)filter插件配置管理的概述

grok插件

-解析各种非结构化的日志数据插件

-grok使用正则表达式把非结构化的数据结构化在分组匹配-正则表达式需要根据具体数据结构编写

-虽然编写困难,但适用性极广

-几乎可以应用于各类数据

filter{ 
  grok {
    match => { "message" => "" }
  }
}

2)filter插件配置的正则概述

  • 正则表达式分组匹配格式:

调用格式:(?<名字>正则表达式)

## 以apache日志为例写一个正则
~]# vim /etc/logstash/conf.d/my.conf
​
input {
  stdin { codec => "json" }
  file {
    path => ["/tmp/b.log","/tmp/c.log"]
    type => "test"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}
​
filter{
  grok {
    match => { "message" => "(?<client_IP>(25[0-5]|2[0-4]\d|1?\d?\d\.){3}(25[0-5]|2[0-4]\d|1?\d?\d)) (?<vber>\S+) (?<auth>\S+) \[(?<time>.+)\] \"(?<method>[A-Z]+) (?<url>\S+) (?<proto>[A-Z]+\/\d\.\d)\" (?<rc>\d+) (?<size>\d+) \"(?<ref>\S+)\" \"(?<agent>[^\"]+)\"" }
  }
}
​
output{
  stdout{ codec => "rubydebug" }
}

  • 正则表达式宏调用格式

调用格式: %{宏名称:名字}

~]# vim /etc/logstash/conf.d/my.conf
input {
  stdin { codec => "json" }
  file {
    path => ["/tmp/b.log","/tmp/c.log"]
    type => "test"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}
​
filter{
  grok {
     match => { "message" => "%{IP:client_IP}" }   # 用宏
  }
}
​
output{
  stdout{ codec => "rubydebug" }
 

宏文件路径

/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns

]# cd /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns
~]# ls
aws     exim           httpd         maven                 nagios      ruby
bacula  firewalls      java          mcollective           postgresql  squid
bind    grok-patterns  junos         mcollective-patterns  rails
bro     haproxy        linux-syslog  mongodb               redis

查看IP的宏

## 用httpd宏示例
~]# echo '192.168.1.252 - - [29/Jul/2020:14:06:57 +0800] "GET /info.html HTTP/1.1" 200 119 "-" "curl/7.29.0"' >/tmp/c.log
~]# vim /etc/logstash/conf.d/my.conf
input {
  file {
    path => ["/tmp/c.log"]
    type => "test"
    start_position => "beginning"
    sincedb_path => "/dev/null"     #把日志位置指针指向空可以反复读取
  }
}
filter{
  grok {
    match => { "message" => "%{HTTPD_COMBINEDLOG}" } # 调用httpd的宏把匹配出日志的各个字段含义转化成json格式
  }
}
output{
  stdout{ codec => "rubydebug" }
}
~]# /usr/share/logstash/bin/logstash

 

 8)output elasticsearch插件

~]# vim /etc/logstash/conf.d/my.conf
input {
  file {
    path => ["/tmp/c.log"]
    type => "test"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}
filter{
  grok {
    match => { "message" => "%{HTTPD_COMBINEDLOG}" }
  }
}
output{
  stdout{ codec => "rubydebug" }
  elasticsearch {
    hosts => ["es-0004:9200", "es-0005:9200"]  # 把数据写入集群(注,为了防止单点故障,head(es-0001),kibana(es-002,es-003),所以这里就用4和5)
    index => "weblog-%{+YYYY.MM.dd}"
  }   # 索引的名字用来存放日志
}
~]# /usr/share/logstash/bin/logstash
​
# 浏览器打开 head 插件,通过 web 页面浏览验证http://公网IP:9200/_plugin/head/ 

 

查看内容

8.远程获取WEB日志

1)beats插件

如何收集日志?

-由于logstash 依赖JAVA环境,而且占用资源非常大,因此在每一台web 服务器上部署logstash 非常不合适

-我们可以使用更轻量的filebeat 收集日志,通过网络给logstash发送数据

- logstash 使用beats 接收日志,完成分析

logstash接收日志

-如果想接收数据,必须监听网络服务。logstash 可以通过beats插件接收filebeats 发送过来的数据

2)logstash beats插件配置

~]# vim /etc/logstash/conf.d/my.conf
input { 
  stdin { codec => "json" }
  file{
    path => ["/tmp/c.log"]
    type => "test"
    start_position => "beginning"
    sincedb_path => "/var/lib/logstash/sincedb"
  }
  beats {          # 配置beats
    port => 5044
  }
} 
​
filter{ 
  grok {
    match => { "message" => "%{HTTPD_COMBINEDLOG}" }
  }
} 
​
output{ 
  stdout{ codec => "rubydebug" }
  elasticsearch {
    hosts => ["es-0004:9200", "es-0005:9200"]
    index => "weblog-%{+YYYY.MM.dd}"
  }
}
~]# /usr/share/logstash/bin/logstash
​
# 测试,开启另一个终端查看
~]# ss -nulpt | grep 5044

3)web服务安装filebeat

下载软件包

或者

~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.8.8-x86_64.rpm
# 在web服务器上操作
~]# yum install -y filebeat.x86_64 0:6.8.8-1
~]# vim /etc/filebeat/filebeat.yml
24:  enabled: true    # 打开模块
28:  - /var/log/httpd/access_log  # 监控日志文件名
45:    fields:        # 定义标签
46:       my_type: apache # 改成自己的标签
148, 150 注释掉            # 因为日志不是json格式不能直接写
161: output.logstash:
163:   hosts: ["(logstash的ip):5044"]
180, 181, 182 注释掉  # 收集系统性息
​
# 查看修改
~]# grep -Pv "^\s*(#|$)" /etc/filebeat/filebeat.yml
# 启动filebeat服务(最好重启一下apache服务,为了更好的识别filebeat)
~]# systemctl enable --now filebeat

4.验证

配置完成以后可以 使用grep查看

~]# grep -Pv "^\s*(#|$)" /etc/filebeat/filebeat.yml
# 启动服务
~]# /usr/share/logstash/bin/logstash

访问web服务器查看

 

 kibana配置

 

 

 

排错思路

# 1.查看端口是否启动(5044)
~]# ss -nulpt | grep 5044
# 2.查看配置文件是否有问题
~]# cat /etc/logstash/conf.d/my.conf
# ping一下指定的elasticsearch集群的ip
# 3.查看elasticsearch数据库集群的状态(red为错误状态)
~]# curl http://node-2:9200/_cat/indices
# 4.查看集群(如果没有启动则需要到所有服务上启动elasticsearch)
~]# curl http://node-2:9200/_cat/nodes
# 查看是否恢复
~]# curl http://node-2:9200/_cluster/health?pretty

访问测试

 ~]# ab -c 20 -n 200 http://172.17.0.51/info.php
 -c # 并发
 -n # 次数

直接选择查看ip

再次拆分(可以看到是apache的ab压力测试)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Logstash完成ELK集群 的相关文章

  • Logstash 与 java10 出现错误:无法识别的 VM 选项“UseParNewGC”[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我在跑logstashJava 10 如下 logstash f std std conf 但我收到此错误 Unrecognize
  • Logstash mutate 添加 json 中的所有字段

    我正在使用 Logstash 插件 logstash input rethinkdb 该插件获取数据库中的所有编辑并输出包含以下结构的 json 对象 db itjobs table countries old val null new v
  • Logstash 可以同时处理多个输出吗?

    我对 Logstash 和弹性搜索很陌生 我正在尝试将日志文件存储在elasticsearch 和平面文件中 我知道logstash 支持这两种输出 但它们是同时处理的吗 还是通过工作定期完成 是的 您可以通过使用托运人配置上的 add t
  • Logstash:如何将文件名添加为字段?

    我使用 Logstash Elasticsearch Kibana 来概览我的 Tomcat 日志文件 对于每个日志条目 我需要知道它来自的文件的名称 我想将其添加为字段 有办法做到吗 我用谷歌搜索了一下 只发现这个问题 https sta
  • Logstash 的 Django 日志记录格式

    我正在尝试将 django 应用程序配置为以 Logstash 易于使用的格式写入日志 受到 Node 的 Winston 日志记录包的启发 Logstash 需要一个 JSON 对象 其中包含键 message 和时间戳 timestam
  • Logstash Web UI 无法启动

    当我尝试使用 Web 前端启动 Logstash 时 我遇到了异常 尽管我遵循了以下位置的所有步骤官方教程 http logstash net docs 1 1 10 tutorials getting started centralize
  • Logstash grok 过滤器配置用于 php monolog 多行(stacktrace)日志

    2018 02 12 09 15 43 development WARNING home page 2018 02 12 09 15 43 development INFO home page 2018 02 12 10 22 50 dev
  • Logstash 与 log4j socketappender 不起作用

    我正在尝试通过 log4j 套接字附加程序流式传输我的日志 并尝试通过logstash log4j 输入插件检索相同的日志 我的logstash配置看起来像 input log4j type gt socketlogs port gt 19
  • 运行多个实例时无法启动logstash - path.data 设置

    你好 我是 ELK 堆栈内部的新手 在后台运行一个logstash进程 当它找到匹配的文件模式时 它如下所示 我想了解这里的重要性是什么path data选项 请帮帮我 FATAL logstash runner Logstash coul
  • 删除包含哈希字符的日志行

    在我的 Logstash 发货程序中 我想过滤掉用哈希字符注释的行 This log row should be dropped But one this should not 我能够使用grep过滤器 但由于不鼓励 即将退役 我试图获得一
  • 如何使用logstash插件-logstash-input-http

    我正在探索 Logstash 以接收 HTTP 上的输入 我已经使用以下方式安装了 http 插件 插件安装logstash input http 安装成功 然后我尝试使用以下命令运行logstash Logstash e 输入 http
  • 测试完成后如何自动终止logstash代理?

    我有一个 Logstash 代理来监视我们的自动测试的日志转储 在每批测试开始时 都会启动一个代理 侦听特定文件夹 并在结束时停止 问题是在最后 我需要以某种方式向 Logstash 代理发出信号 表明测试已完成并杀死自己 我怎样才能做到这
  • Logstash doc_as_upsert Elasticsearch 中的交叉索引以消除重复

    我有一个logstash 配置 它在输出块中使用以下内容来尝试减少重复 output if type usage elasticsearch hosts gt elastic4 9204 index gt usage YYYY MM dd
  • 为什么 Elastic Cloud 部署中存在 Logstash 实例?

    我正在调查 Elastic Cloud 托管的 ELK 堆栈 https www elastic co cloud elasticsearch service https www elastic co cloud elasticsearch
  • Logstash 的 Java 过滤器

    你知道 Logstash 有一个 Ruby 过滤器 它使我能够用 Ruby 编写代码 它通常包含在配置文件中 如下所示 filter ruby code gt 现在我有两个 Jar 文件 我想将它们包含在过滤器中 以便可以根据我在这些 Ja
  • 将数据从 Dynamodb 发送到 Amazon Elasticsearch 的最佳方式

    我想知道将数据从 dynamoDB 发送到 elasticsearch 的最佳方式是什么 AWS SDK js https github com Stockflare lambda dynamo to elasticsearch blob
  • 适用于 MYSQL 的 Logstash Jdbc 输入插件

    我在 Windows 中使用 Logstash 我无法安装输入 jdbc 插件 因此我手动下载了 zip 文件 并将插件中的logstash 文件夹放入我的logstash 1 5 2 文件夹中 文件夹结构 D elastic search
  • 如何替换 Logstash 中字段中的字符串

    我的 Windows 事件日志中有一个 IP 地址字段 其中 IP 地址前面包含类似 fffff 的字符 我无法更改此处的源 因此我必须在 Logstash 中修复此问题 我一定很不擅长谷歌搜索 但我真的找不到一种简单的方法来从logsta
  • 超出elasticsearch中字段的最大长度 - kibana中的错误

    发现 prod logs 索引的 CSnZmwB xkQcDCOrP1V 文档的 message 字段的长度已超过 1000000 允许分析突出显示的最大值 可以通过更改 index highlight max analyzed offse
  • 如何将ElasticSearch与MySQL集成?

    在我的一个项目中 我计划将 ElasticSearch 与 MySQL 结合使用 我已经成功安装ElasticSearch 我可以单独管理ES中的索引 但我不知道如何用 MySQL 实现同样的功能 我读过一些文件 但我有点困惑 没有明确的想

随机推荐

  • 业界难题-“跨库分页”的四种方案

    转载来源 xff1a 业界难题 跨库分页 的四种方案 一 需求缘起 分页需求 互联网很多业务都有分页拉取数据 的需求 xff0c 例如 xff1a xff08 1 xff09 微信消息过多时 xff0c 拉取第 N页消息 xff08 2 x
  • repeater合并单元格

    repeater中合并单元格 xff1a 在repeater bind 后直接加入以下代码 xff1a for int i 61 repeater1 Items Count 1 i gt 0 i HtmlTableCell rep prev
  • 在centOS6.8下更新安装gcc4.7.4

    因为科研需要 xff0c 在centOS6 8系统下配置matlab与C混合编程的环境 xff08 用C来调用MATLAB引擎 xff09 MATLAB安装的是R2015b的版本 xff08 之前安装R2014a版本 xff0c 没办法启动
  • C++很难吗?到底有多难?

    C 43 43 他爹Bjarne Stroustrup都曾开玩笑说自己已经搞不懂C 43 43 了 xff0c 他也曾多次表达过C 43 43 似乎已经有点太庞大了 其实也不是说C 43 43 语法多么复杂 xff0c 而是C 43 43
  • 十、Notepad++正则表达式使用

    推荐个正则表达式在线测试的工具http ccmpp com Regex Notepad 43 43 正则表达式使用 2011 01 06 10 01 35 分类 xff1a 文档 标签 xff1a 正则表达式 替换 notepad 43 4
  • ffmpeg分析 之 如何解析mpegts流

    转 xff1a http blog chinaunix net uid 20364597 id 3530284 html ffmpeg分析 之 如何解析mpegts流 2013 03 19 11 02 40 分类 xff1a LINUX 数
  • Spring简介

    一 Spring简介 1 Spring介绍 61 61 简化开发 61 61 xff0c 降低企业级开发的复杂性 61 61 框架整合 61 61 xff0c 高效整合其他技术 xff0c 提高企业级应用开发与运行效率 1 2 spring
  • SVN服务器彻底删除错误提交的版本

    尝试通过以下操作可以删除SVN服务器上错误提交的版本 xff0c 即本次提交 1 首先找到本次提交后生成的版本号 xff0c 例如为 xff1a 16 2 登录到SVN服务器上 xff0c 进入到项目的SVN目录 xff0c 或者找到本地的
  • Linux hosts.allow与hosts.deny文件设置

    redhat as4常用应用之hosts allow和hosts deny 一 概述 这两个文件是tcpd服务器的配置文件 xff0c tcpd服务器可以控制外部IP对本机服务的访问 这两个配置文件的格式如下 xff1a 服务进程名 主机列
  • 01python画的玫瑰

    刚开始学习python xff0c 还处于菜鸟阶段 xff0c 这段时间学习了turtle库 xff0c 纯手工画了一朵玫瑰 xff0c 拿出来与大家分享 xff01 源码地址 xff1a https github com YinZhong
  • 02turtle模块常用函数

    turtle模块函数
  • 04主存储器、BIOS和CMOS存储器

    主存储器 BIOS和CMOS存储器 一 PC AT机内存使用图 二 ROM BIOS 存放在ROM中的系统BIOS程序主要用于计算机开机时执行系统各部分的自检 xff0c 建立系统需要使用的各种配置表 xff0c 例如中断向量表 硬盘参数表
  • 06异常处理

    python的异常处理 python使用try except xff0c 可使程序不因为运行错误而崩溃 结构如下 xff1a try span class hljs tag lt span class hljs title body spa
  • 07turtle库的进阶使用

    turtle库的进阶使用 turtle库以屏幕中心为绘制原点利用代码绘制一棵树 span class hljs keyword import span turtle span class hljs string 34 34 34 plist
  • 01策略模式

    策略模式 最近在看 Head First设计模式 这本书 xff0c 最大的感触就是 xff0c 原来写代码也是有 套路 的 xff0c 刚学了策略模式 xff0c 用C 43 43 实现了一下 xff0c 做个笔记 xff0c 备忘 xf
  • 三十二、git pull简介

    本文整理自 xff1a http web mit edu mkgray project silk root afs sipb project git git doc git pull html http www cnblogs com lb
  • linux驱动开发 - 12_platform 平台驱动模型

    文章目录 platform 平台驱动模型1 platform 总线platform匹配过程 2 platform 驱动platform 驱动框架如下所示 xff1a 3 platform 设备platform 设备信息框架如下所示 xff1
  • RSA加密OpenSSLX509CertificateFactory$ParsingException: Error parsing public key报错解决

    RSA加密OpenSSLX509CertificateFactory ParsingException Error parsing public key报错解决 一 代码 span class token keyword private s
  • 最小外接矩形

    得到凸包 参考上篇文章算法思路 参考这篇文章 xff0c 链接 依次计算相邻点角度 xff0c 反向旋转所有凸包点集 xff0c 计算最小外接正矩形以及面积 往复迭代所有凸包点 xff0c 得到面积最小的解 xff0c 反向旋转调整角度即可
  • Logstash完成ELK集群

    注 xff1a 本文与同步 9条消息 搭建Elasticsearch和kibana完成初步ELK日志分析平台搭建 kali yao的博客 CSDN博客 logstash搭建 1 logstash介绍 什么是logstash 是一个数据采集