上一篇:ELK 架构之 Elasticsearch 和 Kibana 安装配置

阅读目录:

  • 1. 环境准备
  • 2. 安装 Logstash
  • 3. 配置 Logstash
  • 4. Logstash 采集的日志数据,在 Kibana 中显示
  • 5. 安装配置 Filebeat
  • 6. Filebeat 采集的日志数据,在 Kibana 中显示
  • 7. Filebeat 采集日志数据,Logstash 过滤
  • 8. Filebeat 采集的日志数据,Logstash 过滤后,在 Kibana 中显示

上一篇主要说的是 Elasticsearch 和 Kibana 安装配置,以及服务追踪数据的处理和展示,日志数据采集使用的 Spring Cloud Sleuth Zipkin + Stream/RabbitMQ 中间件(Service 端配置),然后 Zipkin Server 从队列中获取日志数据,再使用 HTTP 的请求的方式,传输并存储到 Elasticsearch 中,最后 Kibana 进行日志数据展示。

在 ELK Stack 中,日志数据采集有单独的工具,就是 Logstash 和 Beats。

  • Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为 c/s 架构,client 端安装在需要收集日志的主机上,server 端负责将收到的各节点日志进行过滤、修改等操作在一并发往 Elasticsearch 上去。
  • Beats 在这里是一个轻量级日志采集器,其实 Beats 家族有 6 个成员,早期的 ELK 架构中使用 Logstash 收集、解析日志,但是 Logstash 对内存、cpu、io 等资源消耗比较高。相比 Logstash,Beats 所占系统的 CPU 和内存几乎可以忽略不计。

目前 Beats 包含六种工具:

  • Packetbeat: 网络数据(收集网络流量数据)
  • Metricbeat: 指标(收集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)
  • Filebeat: 日志文件(收集文件数据)
  • Winlogbeat: windows 事件日志(收集 Windows 事件日志数据)
  • Auditbeat:审计数据(收集审计日志)
  • Heartbeat:运行时间监控(收集系统运行时的数据)

本篇文章目的:

  • 1. Logstash 日志数据采集,Elasticsearch 存储,Kibana 展示
  • 2. Filebeat 日志数据采集,Elasticsearch 存储,Kibana 展示
  • 3. Filebeat 日志数据采集,Logstash 过滤,Elasticsearch 存储,Kibana 展示

第三种方案的实现架构图:

1. 环境准备

服务器环境:Centos 7.0(单机版)

Elasticsearch 和 Logstash 需要 Java,Elasticsearch 推荐的版本为 Java 8,安装教程:确定稳定的 Spring Cloud 相关环境版本

另外,我们需要修改下服务器主机信息:

[root@node1 ~]# vi /etc/hostname
node1 [root@node1 ~]# vi /etc/hosts
192.168.0.11 node1
127.0.0.1 node1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 node1 localhost localhost.localdomain localhost6 localhost6.localdomain6

2. 安装 Logstash

运行以下命令将 Elasticsearch 公共 GPG 密钥导入 rpm:

[root@node1 ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

/etc/yum.repos.d/目录中,创建一个名为logstash.repo的文件,添加下面配置:

[logstash-5.x]
name=Logstash repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

然后安装 Logstash:

[root@node1 ~]# yum makecache && yum install logstash -y
已加载插件:fastestmirror
base | 3.6 kB 00:00:00
elasticsearch-5.x | 1.3 kB 00:00:00
extras | 3.4 kB 00:00:00
kibana-5.x | 1.3 kB 00:00:00
logstash-5.x | 1.3 kB 00:00:00
rabbitmq-erlang | 1.3 kB 00:00:00
updates | 3.4 kB 00:00:00
Loading mirror speeds from cached hostfile
* base: mirrors.163.com
* extras: mirrors.163.com
* updates: mirrors.163.com
元数据缓存已建立
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.163.com
* extras: mirrors.163.com
* updates: mirrors.163.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 logstash.noarch.1.5.6.9-1 将被 安装
--> 解决依赖关系完成 依赖关系解决 =====================================================================================================
Package 架构 版本 源 大小
=====================================================================================================
正在安装:
logstash noarch 1:5.6.9-1 elasticsearch-5.x 98 M 事务概要
=====================================================================================================
安装 1 软件包 总下载量:98 M
安装大小:188 M
Downloading packages:
logstash-5.6.9.rpm | 98 MB 00:06:38
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : 1:logstash-5.6.9-1.noarch 1/1
Using provided startup.options file: /etc/logstash/startup.options
/usr/share/logstash/vendor/jruby/bin/jruby:行388: /usr/bin/java: 没有那个文件或目录
Unable to install system startup script for Logstash.
验证中 : 1:logstash-5.6.9-1.noarch 1/1 已安装:
logstash.noarch 1:5.6.9-1 完毕!

安装报错,具体问题:/usr/share/logstash/vendor/jruby/bin/jruby:行388: /usr/bin/java: 没有那个文件或目录

解决方案:安装 Logstash 提示 /usr/bin/java: No such file or directory

对 Java 配置软链接,链接到/usr/bin/java

[root@node1 ~]# ln -s /usr/local/java/bin/java /usr/bin/java

然后卸载 Logstash:

[root@node1 ~]# yum -y remove logstash

重新安装:

[root@node1 ~]# yum makecache && yum install logstash -y

设置开机启动,以及启动系统服务:

[root@node1 ~]# sudo /bin/systemctl daemon-reload
[root@node1 ~]# sudo /bin/systemctl enable logstash.service

先不急启动 Logstash,需要先配置下 Logstash。

3. 配置 Logstash

采集日志数据,需要有个数据源,这里我们使用 rsyslog 进行测试。

Linux 日志机制的核心是 rsyslog 守护进程,该服务负责监听 Linux下 的日志信息,并把日志信息追加到对应的日志文件中,一般在 /var/log 目录下。 它还可以把日志信息通过网络协议发送到另一台 Linux 服务器上,或者将日志存储在 MySQL 或 Oracle 等数据库中。

修改 rsyslog 配置:

[root@node1 ~]# vi /etc/rsyslog.conf
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
*.* @@192.168.1.40:10514

重启 rsyslog:

[root@node1 ~]# systemctl restart rsyslog

增加配置文件:

[root@node1 ~]# vi /etc/logstash/conf.d/syslog.conf
input {
syslog {
type => "system-syslog"
port => 10514
}
}
output {
elasticsearch {
hosts => ["node1:9200"] # 定义es服务器的ip
index => "system-syslog-%{+YYYY.MM}" # 定义索引
}
}

验证配置文件,是否有效:

[root@node1 ~]# cd /usr/share/logstash/bin
[root@node1 bin]# ./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf --config.test_and_exit
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
Configuration OK

启动 Logstash:

[root@node1 ~]# systemctl start logstash

查看启动日志:

[root@node1 ~]# cat /var/log/logstash/logstash-plain.log
[2018-05-15T08:19:05,578][FATAL][logstash.runner ] An unexpected error occurred! {:error=>#<ArgumentError: Path "/var/lib/logstash/queue" must be a writable directory. It is not writable.>, :backtrace=>["/usr/share/logstash/logstash-core/lib/logstash/settings.rb:439:in `validate'", "/usr/share/logstash/logstash-core/lib/logstash/settings.rb:222:in `validate_value'", "/usr/share/logstash/logstash-core/lib/logstash/settings.rb:138:in `validate_all'", "org/jruby/RubyHash.java:1342:in `each'", "/usr/share/logstash/logstash-core/lib/logstash/settings.rb:137:in `validate_all'", "/usr/share/logstash/logstash-core/lib/logstash/runner.rb:243:in `execute'", "/usr/share/logstash/vendor/bundle/jruby/1.9/gems/clamp-0.6.5/lib/clamp/command.rb:67:in `run'", "/usr/share/logstash/logstash-core/lib/logstash/runner.rb:204:in `run'", "/usr/share/logstash/vendor/bundle/jruby/1.9/gems/clamp-0.6.5/lib/clamp/command.rb:132:in `run'", "/usr/share/logstash/lib/bootstrap/environment.rb:71:in `(root)'"]}

具体错误:Path "/var/lib/logstash/queue" must be a writable directory. It is not writable

解决方案:http://www.cnblogs.com/szk5043/articles/8652677.html

执行命令:

[root@node1 ~]# chown -R logstash /var/log/logstash /var/lib/logstash

重新启动 Logstash:

[root@node1 ~]# systemctl restart logstash

查看 Logstash 启动状态:

[root@node1 ~]# systemctl status logstash
logstash.service - logstash
Loaded: loaded (/etc/systemd/system/logstash.service; enabled)
Active: active (running) since 二 2018-05-15 08:23:37 CEST; 1min 4s ago
Main PID: 10855 (java)
CGroup: /system.slice/logstash.service
└─10855 /usr/bin/java -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupan... 5月 15 08:23:37 node1 systemd[1]: Starting logstash...
5月 15 08:23:37 node1 systemd[1]: Started logstash.
5月 15 08:23:46 node1 logstash[10855]: Sending Logstash's logs to /var/log/logstash which is ...ties
Hint: Some lines were ellipsized, use -l to show in full.

查看端口监听(是否正常):

[root@node1 ~]# netstat -lntp |grep 9600
tcp6 0 0 127.0.0.1:9600 :::* LISTEN 10855/java
[root@node1 ~]# netstat -lntp |grep 10514
tcp6 0 0 :::10514 :::* LISTEN 10855/java

Logstash 的监听 IP 是127.0.0.1这个本地 IP,本地 IP 无法远程通信,所以需要修改一下配置文件,配置一下监听的 IP(需要设置 IP 地址,不能设置 Hostname):

[root@node1 ~]# vi /etc/logstash/logstash.yml
http.host: "192.168.1.40"

重新启动 Logstash:

[root@node1 ~]# systemctl restart logstash

查看端口监听(是否正常):

[root@node1 ~]# netstat -lntp |grep 9600
tcp6 0 0 192.168.1.40:9600 :::* LISTEN 11214/java

4. Logstash 采集的日志数据,在 Kibana 中显示

查看 Elasticsearch 索引列表,可以看到生成了system-syslog-*类型的日志数据:

[root@node1 ~]# curl http://node1:9200/_cat/indices?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open twitter k1KnzWyYRDeckjt7GASh8w 5 1 1 0 5.2kb 5.2kb
yellow open .kibana 8zJGQkq8TwC4s3JJLMX44g 1 1 5 0 27.1kb 27.1kb
yellow open system-syslog-2018.05 0aKfJeOmTZ6yen9eSlCOig 5 1 32 0 201.9kb 201.9kb
yellow open zipkin:span-2018-05-15 8vnm9SJvSlK-cAtakK8VeQ 3 1 9 0 47.3kb 47.3kb
yellow open zipkin:span-2018-05-14 TZ-MmJpoSs-NwjHjxEvhFQ 3 1 219 0 127.1kb 127.1kb
yellow open student iZPqPcwrQbifGOfE9DQYvg 5 1 0 0 955b 955b

然后在 Kibana 上面创建system-syslog-*索引:

创建好之后,就可以看到整个日志数据了:

其实这里显示的日志数据就是/var/log/messages文件里的数据,因为 Logstash 里配置的就是收集messages文件里的数据。

以上这就是如何使用 Logstash 收集系统日志,输出到 Elasticsearch 服务器上,并在 Kibana 的页面上进行查看。

5. 安装配置 Filebeat

运行以下命令将 Elasticsearch 公共 GPG 密钥导入 rpm:

[root@node1 ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

/etc/yum.repos.d/目录中,创建一个名为elastic.repo的文件,添加下面配置:

[elastic-5.x]
name=Elastic repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

安装 Filebeat:

[root@node1 ~]# yum makecache && yum install filebeat -y

设置开机启动,以及启动系统服务:

[root@node1 ~]# sudo /bin/systemctl daemon-reload
[root@node1 ~]# sudo /bin/systemctl enable filebeat.service

编辑配置文件:

[root@node1 ~]# vi /etc/filebeat/filebeat.yml
filebeat.prospectors:
- type: log
paths:
- /var/log/messages # 指定需要收集的日志文件的路径 output.elasticsearch:
# Array of hosts to connect to.
hosts: ["node:9200"] # 配置 Elasticsearch 服务器的 IP 地址

启动 Filebeat 服务:

[root@node1 ~]# systemctl start filebeat

查看 Filebeat 服务状态:

[root@node1 ~]# systemctl status filebeat
filebeat.service - filebeat
Loaded: loaded (/usr/lib/systemd/system/filebeat.service; enabled)
Active: active (running) since 二 2018-05-15 09:29:44 CEST; 1min 12s ago
Docs: https://www.elastic.co/guide/en/beats/filebeat/current/index.html
Main PID: 12332 (filebeat)
CGroup: /system.slice/filebeat.service
└─12332 /usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml -path.home /usr/... 5月 15 09:29:44 node1 systemd[1]: Started filebeat.

6. Filebeat 采集的日志数据,在 Kibana 中显示

查看 Elasticsearch 索引列表,可以看到生成了filebeat-*类型的日志数据:

[root@node1 ~]# curl http://node1:9200/_cat/indices?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open twitter k1KnzWyYRDeckjt7GASh8w 5 1 1 0 5.2kb 5.2kb
yellow open .kibana 8zJGQkq8TwC4s3JJLMX44g 1 1 6 0 33.3kb 33.3kb
yellow open system-syslog-2018.05 0aKfJeOmTZ6yen9eSlCOig 5 1 689 0 652.3kb 652.3kb
yellow open filebeat-2018.05.15 K852lKlgSaKG6-hE_GNB4w 5 1 27417 0 6.7mb 6.7mb
yellow open zipkin:span-2018-05-15 8vnm9SJvSlK-cAtakK8VeQ 3 1 9 0 47.3kb 47.3kb
yellow open zipkin:span-2018-05-14 TZ-MmJpoSs-NwjHjxEvhFQ 3 1 219 0 127.1kb 127.1kb
yellow open student iZPqPcwrQbifGOfE9DQYvg 5 1 0 0 955b 955b

然后在 Kibana 上面创建filebeat-*索引:

创建好之后,就可以看到整个日志数据了:

和上面 Logstash 收集 rsyslog 日志数据一样,Filebeat 配置的,也是收集的/var/log/messages日志数据。

可以看到,system-syslogfilebeat-索引对应的日志数据,是同步更新的(如果没效果,重启下 Logstash 和 Filebeat)。

7. Filebeat 采集日志数据,Logstash 过滤

先停止 Logstash 和 Filebeat:

[root@node1 ~]# systemctl stop logstash &&
systemctl stop filebeat

然后删除上面产生的索引日志数据:

[root@node1 ~]# curl -XDELETE http://node1:9200/system-syslog-2018.05 &&
curl -XDELETE http://node1:9200/filebeat-2018.05.15

创建新的 Logstash 配置文件:

[root@node1 ~]# vi /etc/logstash/conf.d/logstash-filebeat-syslog.conf
input {
beats {
port => 10515
}
}
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{host}" ]
}
syslog_pri { }
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
}
output {
elasticsearch {
hosts => [ "node1:9200" ]
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
}
}

验证 Logstash 配置文件,是否有效:

[root@node1 ~]# cd /usr/share/logstash/bin
[root@node1 bin]# ./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/logstash-filebeat-syslog.conf --config.test_and_exit
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
Configuration OK

编辑 Filebeat 配置文件(注释掉output.elasticsearch):

[root@node1 ~]# vi /etc/filebeat/filebeat.yml
filebeat.prospectors:
- type: log
paths:
- /var/log/messages # 指定需要收集的日志文件的路径
fields:
log_type: syslog output.logstash:
# The Logstash hosts
hosts: ["node1:10515"]

重新启动 Logstash 和 Filebeat:

[root@node1 ~]# systemctl restart logstash &&
systemctl restart filebeat

查看 Logstash 是否正常监听:

[root@node1 conf.d]# netstat -lnp|grep 10515
tcp6 0 0 :::10515 :::* LISTEN 22384/java

8. Filebeat 采集的日志数据,Logstash 过滤后,在 Kibana 中显示

可以看到生成了filebeat-*类型的日志数据(system-syslog-2018.05索引日志数据,是由 Logstash 的syslog.conf配置文件采集的):

[root@node1 ~]# curl http://node1:9200/_cat/indices?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open twitter k1KnzWyYRDeckjt7GASh8w 5 1 1 0 5.2kb 5.2kb
yellow open .kibana 8zJGQkq8TwC4s3JJLMX44g 1 1 7 1 57.4kb 57.4kb
yellow open system-syslog-2018.05 dzRXf3eFQ_-hKqlGILTSJg 5 1 223 0 511.9kb 511.9kb
yellow open zipkin:span-2018-05-15 8vnm9SJvSlK-cAtakK8VeQ 3 1 49 0 142.6kb 142.6kb
yellow open filebeat-2018.05.15 eEuumW8pTdeXa7Ny1gLIPQ 5 1 177 0 300.2kb 300.2kb
yellow open zipkin:span-2018-05-14 TZ-MmJpoSs-NwjHjxEvhFQ 3 1 219 0 127.1kb 127.1kb
yellow open student iZPqPcwrQbifGOfE9DQYvg 5 1 0 0 955b 955b

因为之前创建了filebeat-*system-syslog-*索引,这边我们可以直接查看日志数据了:

以上是使用 ELK Logstash 和 Filebeat 采集日志数据的过程(使用 rsyslog 日志数据源),后面需要将 ELK 集成到 Spring Cloud/Boot 中,用作整个微服务的集中日志采集处理中心。

参考资料:

ELK 架构之 Logstash 和 Filebeat 安装配置的更多相关文章

  1. ELK 架构之 Elasticsearch、Kibana、Logstash 和 Filebeat 安装配置汇总(6.2.4 版本)

    相关文章: ELK 架构之 Elasticsearch 和 Kibana 安装配置 ELK 架构之 Logstash 和 Filebeat 安装配置 ELK 架构之 Logstash 和 Filebe ...

  2. ELK 架构之 Logstash 和 Filebeat 配置使用(采集过滤)

    相关文章: ELK 架构之 Elasticsearch 和 Kibana 安装配置 ELK 架构之 Logstash 和 Filebeat 安装配置 ELK 使用步骤:Spring Boot 日志输出 ...

  3. ELK 架构之 Elasticsearch 和 Kibana 安装配置

    阅读目录: 1. ELK Stack 简介 2. 环境准备 3. 安装 Elasticsearch 4. 安装 Kibana 5. Kibana 使用 6. Elasticsearch 命令 最近在开 ...

  4. ELk(Elasticsearch, Logstash, Kibana)的安装配置

    目录 ELk(Elasticsearch, Logstash, Kibana)的安装配置 1. Elasticsearch的安装-官网 2. Kibana的安装配置-官网 3. Logstash的安装 ...

  5. FileBeat安装配置

    在ELK中因为logstash是在jvm上跑的,资源消耗比较大,对机器的要求比较高.而Filebeat是一个轻量级的logstash-forwarder,在服务器上安装后,Filebeat可以监控日志 ...

  6. 第二篇:Filebeat 安装配置

    Filebeat 简介:Filebeat 是一款轻量型日志收集工具,可转发汇总日志.文件等内容.                         其主要特点为:1. 断点续传.(如遇日志转发过程中网络 ...

  7. elk系列教程:docker中安装配置elk

    elasticSearch Docker安装elasticsearch: docker pull docker.io/elasticsearch:7.2.0 启动: docker run -p 920 ...

  8. ELK+Filebeat 安装配置入门

    本文地址 http://www.cnblogs.com/jasonxuli/p/6397244.html   https://www.elastic.co 上,elasticsearch,logsta ...

  9. 架构(三)MongoDB安装配置以及集群搭建

    一 安装 1.1 下载MongoDB 我个人不太喜欢用wget url, 之前出现过wget下载的包有问题的情况 https://fastdl.mongodb.org/linux/mongodb-li ...

随机推荐

  1. Cocos2D中相关问题提问的几个论坛

    如果和SpriteBuilder相关可以到: http://forum.spritebuilder.com 提问. 如果是Cocos2D的问题,则可以到以下论坛询问: http://forum.coc ...

  2. Android群英传笔记——第九章:Android系统信息和安全机制

    Android群英传笔记--第九章:Android系统信息和安全机制 本书也正式的进入尾声了,在android的世界了,不同的软件,硬件信息就像一个国家的经济水平,军事水平,不同的配置参数,代表着一个 ...

  3. Learning ROS for Robotics Programming Second Edition学习笔记(三) 补充 hector_slam

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  4. how tomcat works 六 生命周期

    我觉得这一章叫tomcat中的观察者模式,比较好! 首先,不要看本章,请查看一下关于观察者模式的资料比较好. 推荐以下知识点 基础篇 设计模式之禅----观察者模式 大家可以找到pdf阅读一下 另外本 ...

  5. Android特效专辑(三)——自定义不一样的Toast

    Android特效专辑(三)--自定义不一样的Toast 大家都知道,Android的控件有时候很难满足我们的需求,所以我们需要自定义View.自定义的方式很多,有继承原生控件也有直接自定义View的 ...

  6. ZeroC Ice IceGrid Node和IceGrid

    IceGrid Node介绍 绝大多数分布式系统都有一个共同特点,即分布在各个主机上的节点进程并不是完全独立的,而是彼此之间有相互联系和通信的.集群对集群中的节点有一些控制指令,如部署.启停或者调整某 ...

  7. 【Qt编程】基于Qt的词典开发系列<四>--无边框窗口的缩放与拖动

    在现在,绝大多数软件都向着简洁,时尚发展.就拿有道的单词本和我做的单词本来说,绝大多数用户肯定喜欢我所做的单词本(就单单界面,关于颜色搭配和布局问题,大家就不要在意了). 有道的单词本: 我所做的单词 ...

  8. web报表工具FineReport常用函数的用法总结(日期和时间函数)

    web报表工具FineReport常用函数的用法总结(日期和时间函数) 说明:凡函数中以日期作为参数因子的,其中日期的形式都必须是yy/mm/dd.而且必须用英文环境下双引号(" " ...

  9. gdb中的define命令

    可以使用define命令达到类似于display的效果:比如每ni后显示当前5条指令: define s5 ni x/5i $pc end 甚至可以手动传入要显示指令的条数: define s ni ...

  10. Java:bufferedReader.readLine()读取文件换行问题

    代码实现读取到的内容正常换行,并将内容复制到系统剪贴板当中去. public static void ReadAlart() { try { String encoding="utf-8&q ...