ELK日志分析系统部署
ELK介绍
环境的困境:
1、开发人员不能登录线上服务器查看详细的日志
2、各个系统都有日志,日志数据分散难以查找
3、日志数据量大,查询速度慢,或者数据不够实时
ELK Stack解决方案:
Elastic Search(对日志进行存储搜索) + LogStash(对日志进行搜集) + Kibana(图形化展示) = ELK Stack
Elasticsearch部署
IP:192.168.88.1
1、安装JDK
# tar zxf jdk-8u101-linux-x64.tar.gz -C /opt/ # vim /etc/profile.d/java.sh export JAVA_HOME=/opt/jdk1.8.0_101 export JAVA_BIN=/opt/jdk1.8.0_101/binls export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME JAVA_BIN PATH CLASSPATH # source /etc/profile.d/java.sh # java -version
2、创建普通用户
# useradd heboan # passwd heboan
3、以普通用户heboan安装Elasticsearch
# tar zxf elasticsearch-5.2.0.tar.gz -C /opt/ # cd /opt/ # ln -s elasticsearch-5.2.0/ elasticsearch # chown -R heboan elasticsearch-5.2.0 elasticsearch # su heboan $ tree -L 1 . ├── bin //运行Elasticsearch实例和管理插件的一些脚本 ├── config //配置文件路径,包含Elastichsearch.yml基本配置文件 ├── lib //Elasticsearch使用的库 ├── LICENSE.txt ├── modules ├── logs //日志目录 ├── NOTICE.txt ├── plugins //插件安装目录 └── README.textile
4、改下配置文件/opt/elasticsearch/config/elasticsearch.yml
cluster.name: my-application //集群名字
node.name: node-88.1 //节点名字
path.data: /data/es-data //数据存放路径,确保创建此目录
# mkdir -p /data/es-data
# chown -R heboan /data/es-data
network.host: 192.168.88.1
http.port: 9200
----官方建议进行的配置说明------------
虽然Elasticsearch仅需要很少的配置,但有一些设置需要手动配置,并且在进入生产之前进行配置
☻ path.data 和 path.logs
#如果使用.zip或.tar.gz安装文件,则data和logs目录是在目录$ES_HOME中。如果这些重要的文件夹保留在默认位置,则在将Elasticsearch升级到新版本时存在将其删除的高风险
☻ cluster.name
#节点只能cluster.name在与集群中所有其他节点共享集群时才加入集群。我们应该将其更改为描述集群用途的适当名称
☻ node.name
#默认情况下,Elasticsearch将使用随机生成的UUID的第一个字符作为节点ID,节点ID是持久的,重启不会更改,我们应该配置一个更有意义的名称
☻ bootstrap.memory_lock
#对节点的健康至关重要,没有一个JVM被交换到磁盘,一种实现方法是将bootstrap.memory_lock设置设置为true
☻ network.host
#默认情况下,Elasticsearch仅绑定到环回地址,为了与其他服务器带上的节点进行通信和形成集群,我们需要将节点绑定到非环回地址
☻ discovery.zen.ping.unicast.hosts
#当与其他服务器的节点形成集群时,我们必须提供集群中可能是活动和可联系的其他节点列表
☻ discovery.zen.minimum_master_nodes
#为了防止数据丢失,此配置至关重要,为了避免脑裂,此设置应该设置为主合格节点的法定 数量(master_eligible_nodes / 2)+1,
换句话说,如果有三个主合格节点,则最小主节点应设置为(3 / 2 ) + 1或2: discovery.zen.minimum_master_nodes:2
5、启动Elasticsearch
$ /opt/elasticsearch/bin/elasticsearch -d //-d 表示在后台运行 >>启动报错,日志如下 bound or publishing to a non-loopback or non-link-local address, enforcing bootstrap checks ERROR: bootstrap checks failed max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536] max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] >>解决办法 切换到root用户修改配置sysctl.conf # vi /etc/sysctl.conf vm.max_map_count=655360 # sysctl -p # echo "* soft nofile 65536" >>/etc/security/limits.conf # echo "* hard nofile 65536" >>/etc/security/limits.conf 修改后重新登录heboan用户,使用如下命令查看是否修改成功 $ ulimit -Hn 65536
6、查看监听的端口,我们发现启动了端口9200,9300
$ netstat -lntp Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN - tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN - tcp6 0 0 192.168.88.1:9200 :::* LISTEN 2428/java tcp6 0 0 192.168.88.1:9300 :::* LISTEN 2428/java tcp6 0 0 :::22 :::* LISTEN - tcp6 0 0 ::1:25 :::* LISTEN -
7、访问9200端口
$ curl 192.168.88.1:9200
{
"name" : "node-88.1",
"cluster_name" : "my-application",
"cluster_uuid" : "5j87qZ4dS9uBIoZc0CEseg",
"version" : {
"number" : "5.2.0",
"build_hash" : "24e05b9",
"build_date" : "2017-01-24T19:52:35.800Z",
"build_snapshot" : false,
"lucene_version" : "6.4.0"
},
"tagline" : "You Know, for Search"
}
8、按照以上步骤在192.168.88.2上部署Elasticsearch,这样我们可以建立一个集群
/opt/elasticsearch/config/elasticsearch.yml更改如下: cluster.name: my-application //集群名字 node.name: node-88.2 //节点名字 path.data: /data/es-data //数据存放路径,确保创建此目录 # mkdir -p /data/es-data # chown -R heboan /data/es-data network.host: 192.168.88.2 http.port: 9200 discovery.zen.ping.unicast.hosts: ["192.168.88.1", "192.168.88.2"] 在192.168.88.1也修改此配置,内容一样 部署过程中遇到问题请参考192.168.88.1解决方案
9、查看集群状态
$ curl -XGET 'http://192.168.88.1:9200/_cluster/health?pretty'
{
"cluster_name" : "my-application",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 2,
"number_of_data_nodes" : 2,
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
logstash部署
1、安装JDK
# tar zxf jdk-8u101-linux-x64.tar.gz -C /opt/ # vim /etc/profile.d/java.sh export JAVA_HOME=/opt/jdk1.8.0_101 export JAVA_BIN=/opt/jdk1.8.0_101/binls export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME JAVA_BIN PATH CLASSPATH # source /etc/profile.d/java.sh # java -version
2、安装
YUM安装下载并安装公共签名密钥 # rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch 例如/etc/yum.repos.d/,在具有.repo后缀的文件中的目录中添加以下内容logstash.repo [logstash-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 可以安装 $sudo yum install logstash 因为使用YUN安装网络慢的原因,这里我使用二进制包安装 ☻下载并解压logstash # tar zxf logstash-5.2.0.tar.gz -C /opt/ # cd /opt/ # ln -s logstash-5.2.0 logstash # chown -R heboan logstash* # su heboan ☻准备logstash.conf配置文件 ☻运行 bin/logstash -f logstash.conf
3、运行Logstash管道测试logstashan安装
一个Logstash管道有两个必需的元素,input和output,和一个可选的元素filter.输入插件从源消耗数据,过滤器插件根据我们指定的内容修改数据,输出插件将数据写入目标。

>>运行最基本的管道:
$ /opt/logstash/bin/logstash -e 'input {stdin {}} output {stdout {}}'
-e表示直接从命令行指定配置,上面的管道是从标准输入stdin,并将该输入以stdout结构化格式移动到标准输出,
启动Logstash后,请等待,直到看到"Successfully started Logstash API endpoint {:port=>9600}",然后在命令提示符处输入:
hello heboan 2017-02-15T10:21:08.599Z host-2.heboan.com hello heboan my name is heboan 2017-02-15T10:21:22.909Z host-2.heboan.com my name is heboan
这样我们已创建并运行基本的logstash管道了
>>更直观的展示信息
$ /opt/logstash/bin/logstash -e 'input {stdin {}} output {stdout {codec => rubydebug}}'
hello heboan
{
"@timestamp" => 2017-02-15T10:31:46.127Z,
"@version" => "1",
"host" => "0.0.0.0",
"message" => "hello heboan"
}
>>现在我们就将输出到Elasticsearch
$ /opt/logstash/bin/logstash -e 'input {stdin {}} output {elasticsearch {hosts => ["192.168.88.1:9200"]}}'
hello heboan
现在我们来查看192.168.88.1上面Elasticsearch的索引所有列表
$ curl '192.168.88.1:9200/_cat/indices?v'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open logstash-2017.02.15 wLuFEV4rRsS87DruuoX6fQ 5 1 1 0 4.6kb 4.6kb
我们发现有一个索引logstash-2017.02.15
删除索引
$ curl -XDELETE '192.168.88.1:9200/logstash-2017.02.15'
Kibana部署
1、解压安装
# tar zxf kibana-5.2.0-linux-x86_64.tar.gz -C /opt/ # cd /opt/ # ln -s kibana-5.2.0-linux-x86_64 kibana # chown -R heboan kibana*
2、目录布局
tar.gz安装包是完全独立的。默认情况下,所有文件和目录都包含在$KIBANA_HOME(解压时创建的目录)中,这是非常方便的,因为
我们不必创建任何目录开始使用Kibana,卸载$KIBANA_HOME就像删除目录一样简单。但是,建议更改配置和数据目录的默认位置,以便
以后不会删除重要数据
# cd kibana # tree -L 1 . ├── bin //二进制脚本包括kibana启动Kibana 服务器和kibana-plugin安装插件 ├── config //配置文件 ├── data //Kibana及其插件写入磁盘的数据文件的位置 ├── LICENSE.txt ├── node ├── node_modules ├── optimize //Transpiled源代码。某些管理操作(例如插件安装)导致源代码被即时重新转换 ├── package.json ├── plugins //插件文件位置。每个插件都将包含在一个子目录中 ├── README.txt ├── src ├── ui_framework └── webpackShims
3、配置Kibana
Kibana服务器kibana.yml在启动时从文件读取属性。默认配置kibana运行localhost:5601。要更改主机或端口号,或连接到在不同计算机
上运行的Elasticsearch,我们需要更新kibana.yml文件。我们还可以启用SSL并设置各种其他选项。
/opt/kibana/config/kibana.yml
| server.port: | 默认值:5601 Kibana由后端服务器提供服务。此设置指定要使用的端口 |
| server.host: | 默认值:“localhost”此设置指定后端服务器的主机 //这里我把kibana安装在88.1上面,所以我指定了IP:192.168.88.1 |
| server.basePath: | 使您能够指定一个路径来挂载Kibana在如果你在代理后面运行。这只影响Kibana生成的URL, 您的代理应该在将请求转发到Kibana之前删除basePath值。此设置不能以斜杠(/)结尾 |
| server.maxPayloadBytes: | 默认值:1048576传入服务器请求的最大有效负载大小(以字节为单位) |
| server.name: | 默认值:“your-hostname”用于标识此Kibana实例的可读的显示名称 |
| server.defaultRoute: | 默认值:“/ app / kibana”此设置指定打开Kibana时的默认路由, 您可以使用此设置在打开Kibana时修改着陆页 |
| elasticsearch.url: | 默认值:“http:// localhost:9200”要用于所有查询的Elasticsearch实例的URL //这里我改为http://192.168.88.1:9200 |
| elasticsearch.preserveHost: | 默认值:true当此设置的值为true时Kibana使用server.host设置中指定的主机名, 当此设置的值为时false,Kibana使用连接到此Kibana实例的主机的主机名 |
| kibana.index: | 默认值:“.kibana”Kibana使用 Elasticsearch中的索引来存储保存的搜索, 可视化和仪表板。如果索引不存在,Kibana将创建一个新索引 |
| kibana.defaultAppId: | 默认值:“discover”要加载的默认应用程序 |
| tilemap.url: | Kibana用于在tilemap可视化中显示地图图块的图块服务的URL。 默认情况下,Kibana从外部元数据服务读取此URL,但用户仍可以覆盖此参数以使用自己的Tile Map Service。 例如:"https://tiles.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana" |
| tilemap.options.minZoom: | 默认值:1最小缩放级别 |
| tilemap.options.maxZoom: | 默认值:10最大缩放级别 |
| tilemap.options.attribution: | 默认:"© [Elastic Tile Service](https://www.elastic.co/elastic-tile-service)"地图属性字符串 |
| tilemap.options.subdomains: | tile服务使用的子域的数组。指定带有令牌的URL的子域的位置{s} |
| elasticsearch.username: 和 elasticsearch.password: |
如果您的Elasticsearch受基本认证保护,这些设置提供Kibana服务器用于在启动时对Kibana索引执行维护的用户名和密码, 您的Kibana用户仍需要使用通过Kibana服务器代理的Elasticsearch进行身份验证 |
| server.ssl.cert: 和 server.ssl.key: |
分别指向PEM格式SSL证书和SSL密钥文件的路径。这些文件为从Kibana服务器到浏览器的传出请求启用SSL |
| elasticsearch.ssl.cert: 和 elasticsearch.ssl.key: |
提供PEM格式SSL证书和密钥文件路径的可选设置。这些文件验证您的Elasticsearch后端使用相同的密钥文件 |
| elasticsearch.ssl.ca: | 可选设置,使您能够为Elasticsearch实例指定证书颁发机构的PEM文件的路径 |
| elasticsearch.pingTimeout: | 默认值:值elasticsearch.requestTimeout设置以毫秒为单位的时间等待Elasticsearch对PING作出响应 |
| elasticsearch.requestTimeout: | 默认值:30000等待来自后端或Elasticsearch的响应的时间(以毫秒为单位)。此值必须为正整数 |
| elasticsearch.requestHeadersWhitelist: | 默认值:[ 'authorization' ]要发送到Elasticsearch的Kibana客户端头标列表。要发送任何客户端头,请将此值设置为[](一个空列表) |
| elasticsearch.customHeaders: | 默认值:{}要发送到Elasticsearch的标题名称和值。无论配置如何, 任何自定义标头都不能被客户端头elasticsearch.requestHeadersWhitelist覆盖 |
| elasticsearch.shardTimeout: | 默认值:0 Elasticsearch等待来自分片的响应的时间(毫秒)。设置为0可禁用 |
| elasticsearch.startupTimeout: | 默认值:5000重试前等待Kibana启动时Elasticsearch的时间(以毫秒为单位 |
| pid.file: | 指定Kibana创建进程标识文件的路径 |
| logging.dest: | 默认值:stdout允许您指定Kibana存储日志输出的文件 |
| logging.silent: | 默认值:false将此设置的值设置true为禁止所有日志记录输出 |
| logging.quiet: | 默认值:false将此设置的值设置true为禁止除错误消息之外的所有日志记录输出 |
| logging.verbose | 默认值:false将此设置的值设置为true记录所有事件,包括系统使用信息和所有请求 |
| ops.interval | 默认值:5000设置示例系统和过程性能指标的间隔(以毫秒为单位)。最小值为100 |
| status.allowAnonymous | 默认值:false如果启用了验证,则将此设置为true允许未经身份验证的用户访问Kibana服务器状态API和状态页 |
| console.enabled | 默认值:true设置为false可禁用控制台。切换这将导致服务器在下次启动时重新生成资产,这可能会导致在开始投放网页之前出现延迟 |
| console.proxyFilter | 默认值:.*用于验证来自控制台的任何传出请求的正则表达式列表。如果没有匹配,请求将被拒绝 |
| console.proxyConfig | 基于代理目标的配置选项列表。使用此选项可以为特定主机设置自定义超时或SSL设置。 这是通过match使用通配符/ globs 定义一组标准来完成的,这将根据每个请求进行检查。然后将所有匹配规则中的配置合并在一起,以配置用于该请求的代理 |
| 有效匹配关键字match.protocol, match.host,match.port, 和match.path |
所有这些键默认为*,这意味着它们将匹配任何值。有关示例,请参阅配置控制台 |
| elasticsearch.tribe.url: | 用于所有查询的Elasticsearch部落实例的可选URL |
| elasticsearch.tribe.username: 和 elasticsearch.tribe.password: |
如果您的Elasticsearch受基本认证保护,这些设置提供Kibana服务器用于在启动时对Kibana索引执行维护的用户名和密码。 您的Kibana用户仍需要使用通过Kibana服务器代理的Elasticsearch进行身份验证 |
| elasticsearch.tribe.ssl.cert: 和 elasticsearch.tribe.ssl.key: |
提供PEM格式SSL证书和密钥文件路径的可选设置。这些文件验证您的Elasticsearch后端使用相同的密钥文件 |
| elasticsearch.tribe.ssl.ca: | 可选设置,使您能够为Elasticsearch实例指定证书颁发机构的PEM文件的路径 |
| elasticsearch.tribe.ssl.verify: | 默认值:true要忽略SSL证书的有效性,请将此设置的值更改为false |
| elasticsearch.tribe.pingTimeout: | 默认值:值elasticsearch.tribe.requestTimeout设置以毫秒为单位的时间等待Elasticsearch对PING作出响应 |
| elasticsearch.requestTimeout: | 默认值:30000等待来自后端或Elasticsearch的响应的时间(以毫秒为单位)。此值必须为正整数 |
elasticsearch.tribe.requestHeadersWhitelist: |
默认值:[ 'authorization' ]要发送到Elasticsearch的Kibana客户端头标列表。要发送任何客户端头,请将此值设置为[](一个空列表) |
| elasticsearch.tribe.customHeaders: | 默认值:{}要发送到Elasticsearch的标题名称和值。无论配置如何, 任何自定义标头都不能被客户端头elasticsearch.tribe.requestHeadersWhitelist覆盖 |
3、运行Kibana
# su heboan $ cd /opt/kibana/bin/ $ ./bin/kibana 默认情况下,Kibana在前台运行,将其日志打印到标准输出(stdout),并可以通过按停止Ctrl-C
4、访问Kibana
浏览器访问192.168.88.1:5601,当我们访问Kibana时,默认情况下将加载"发现"页面,并选择默认索引模式。时间过滤器为最近15分分钟,搜索查询设置为match-all(\*)
如果没有看到任何文档,请尝试将时间过滤器设置为更宽的时间范围。如果还没有看到任何结果,这可能是我们不具备任何文件

我们可以通过导航到达Kibana服务器的状态页192.168.88.1:5601/status ,状态页面显示有关服务器资源使用情况的信息,并列出已安装的插件

实践--->Logstash收集Java日志
日志:
$ tree /home/heboan/logs /home/heboan/logs ├── log-error.2017-02-10.log ├── log-error.2017-02-15.log └── log-info.2017-02-10.log
error日志格式:
2017-02-10 14:23:24.636 [http-nio-8082-exec-7] ERROR com.bagtree.api.app.AppDeviceController 145 - [userFollow:device = 1788223859148804 no bind to children] 2017-02-10 14:23:24.637 [http-nio-8082-exec-7] ERROR com.bagtree.common.extend.CommExceptionHandler 28 - 设备未关联到宝贝 com.bagtree.common.extend.CommException: 设备未关联到宝贝 at com.bagtree.api.app.AppDeviceController.userFollow(AppDeviceController.java:146) ~[classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_101] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_101] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_101] 2017-02-10 14:23:27.319 [http-nio-8082-exec-9] ERROR com.bagtree.api.app.AppDeviceController 145 - [userFollow:device = 1788223859148804 no bind to children] 2017-02-10 14:23:27.320 [http-nio-8082-exec-9] ERROR com.bagtree.common.extend.CommExceptionHandler 28 - 设备未关联到宝贝 com.bagtree.common.extend.CommException: 设备未关联到宝贝 at com.bagtree.api.app.AppDeviceController.userFollow(AppDeviceController.java:146) ~[classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_101] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_101] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_101] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_101] 分析: 从上面的日志我们可以看出,多行事件,就是一个日志事件由多行组成,java的异常日志基本上是这样的
文档说明
input {
stdin {
codec => multiline {
charset =>... # 字符编码 ,可选
max_bytes => # bytes类型,设置最大的字节数,可选
max_lines => #number类型,设置最大的行数,默认是500行,可选
multiline_tag => #string类型,设置一个事件标签,默认是"multiline" ,可选
pattern =>... # string 类型,设置匹配的正则表达式 ,必选 patterns_dir =>... #array类型,可以设置多个正则表达式,可选
negate =>... # boolean类型,设置正向匹配还是反向匹配,默认是false,可选
what =>... # 设置未匹配的内容是向前合并还是向后合并,previous, next 两个值选择,必选
}
}
}
info日志格式:
2017-02-10 23:59:41.156 [Thread-4] INFO com.bagtree.push.OemPushClient 113 - package read length:23 2017-02-10 23:59:41.156 [Thread-4] INFO com.bagtree.push.impl.response.LTHBCmdResponseHandlerImpl 33 - hb response:11722 2017-02-10 23:59:51.128 [Timer-0] INFO com.bagtree.push.impl.response.LTLoginCmdResponseHandlerImpl 70 - hb send:117204298 2017-02-10 23:59:51.158 [Thread-4] INFO com.bagtree.push.OemPushClient 113 - package read length:23 2017-02-10 23:59:51.158 [Thread-4] INFO com.bagtree.push.impl.response.LTHBCmdResponseHandlerImpl 33 - hb response:11723 分析:这个info日志是一行一个事件
根据上述分析,我们编写搜集配置文件
$ vim /opt/logstash/conf/logstash.conf
input {
file {
path => "/home/heboan/logs/log-error.*.log"
type => "log_error"
start_position => "beginning"
codec => multiline {
pattern => "^\d"
negate => true
what => "previous"
}
}
file {
path => "/home/heboan/logs/log-info.*.log"
type => "log_info"
start_position => "beginning"
}
}
output {
if [type] == "log_error" {
elasticsearch {
hosts => ["192.168.88.1:9200"]
index => "log_error_%{+YYYY-MM-dd}"
}
}
if [type] == "log_info" {
elasticsearch {
hosts => ["192.168.88.1:9200]"
index => "log_info_%{+YYYY-MM-dd}"
}
}
}
指定配置文件运行Logstash开始收集日志传送给Elasticsearch
$ /opt/logstash/bin/logstash -f /opt/logstash/conf/logstash.conf 运行成功之后,我们可以看下索引: $ curl '192.168.88.1:9200/_cat/indices?v' health status index uuid pri rep docs.count docs.deleted store.size pri.store.size yellow open log_info_2017-02-16 iq0HUZKMQtqLgPCQpamXTw 5 1 11633 0 4.7mb 4.7mb yellow open .kibana HesedL8WSiuprZzNObB-3w 1 1 1 0 3.1kb 3.1kb yellow open log_error_2017-02-16 lwG1iEsYSNmC5tgFIlUFMA 5 1 9 0 57.5kb 57.5kb
访问Kibana:192.168.88.1:5601

刚刚我们添加了info日志,现在再添加error日志


点击右边面板“Discover”,选择时间筛选出日志

每天进步一点,加油!
浙公网安备 33010602011771号