为什么要搭建日志系统
线上环境发生故障时,工程师需要连接到生产环境服务器,使用各种日志查询命令 tail、cat、sed 、grep等定位故障问题。而在微服务架构下通常一个服务会部署多个实例,那就需要到每个日志目录下去查找日志文件,每个应用实例通常会设置日志滚动策略(按照日期每天一个日志文件)。此类繁琐的工作大大降低了排查问题的效率。于是乎,要解决这个问题,就需要有一套智能化的日志系统,它能够将这些日志管理起来并提供检索功能,帮助工程师及时排查故障,解决这些痛点。因此诞生了ELK日志系统。
什么是ELK
ELK是elastic公司提供的一套从日志收集--存储--展示的完整解决方案,是三个产品的首字母缩写,分别是ElasticSearch、Logstash 和 Kibana。
ElasticSearch
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。它是一个建立在全文搜索引擎Apache Lucene基础上搜索引擎,使用Java语言编写。并且作为elk的核心,集中存储数据。
Logstash
Logstash 是免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到指定的“存储库”中。
Kibana
通过 Kibana,可以对 Elasticsearch 进行可视化,还可以在 Elastic Stack 中进行导航,这样便可以进行各种操作,从跟踪查询负载,到理解请求如何流经整个应用,都能轻松完成。
下载地址
注意:ElasticSearch,Kibana,Logstash,ik版本必须一致
ElasticSearch
安装ElasticSearch
- 使用wget命令下载: wget artifacts.elastic.co/downloads/e…
- 下载完成之后解压 tar -zxvf elasticsearch-7.15.2-linux-x86_64.tar.gz
- 解压完成删除安装文件 rm -rf elasticsearch-7.15.2-linux-x86_64.tar.gz
启动ElasticSearch
-
进入ElasticSearch安装目录config文件夹 cd elasticsearch-7.15.2/config
-
编辑配置文件vim elasticsearch.yml更改如下信息:
path.data: /opt/elasticsearch-7.5.1/data #data存放路径
path.logs: /opt/elasticsearch-7.5.1/logs #日志存放路径
network.host: 0.0.0.0 #监听网络地址
http.port: 9200 #端口
http.cors.enabled: true #跨域
http.cors.allow-origin: "*" -
root用户不能直接启动elasticseach,需要新建一个用户,用新建立的用户去启动es linux创建新用户 adduser elk
给新建用户elk设置密码 passwd elk 密码(需要输入2次)
给新建用户elk对应权限 chown -R elk /root/elk/elasticsearch-7.15.2
切换到新建用户下,执行启动命令 -
启动es 进入bin目录,es启动命令: ./elasticsearch -d (-d表示后台启动)
- 启动不成功: 在/etc/sysctl.conf文件最后一行添加 vm.max_map_count=262144 刷新配置,立即生效 sysctl -p
访问ElasitcSearch
浏览器输入http://ip:9200
看到ElasitcSearch信息安装成功
安装ik中文分词器
根据es版本选择,下载后解压
将文件复制到es安装目录下/plugin/ik下即可
重启es
Kibana
安装Kibana
- 使用wget命令下载: wget artifacts.elastic.co/downloads/k…
- 下载完成之后解压 tar -zxvf kibana-7.15.2-linux-x86_64.tar.gz
- 解压完成删除安装文件 rm -rf kibana-7.15.2-linux-x86_64.tar.gz
启动Kibana
- 进去kibana配置文件夹 cd kibana-7.5.1/config/
- 编辑kibana.yml配置文件 vim kibana.yml 输入如下信息 server.port: 5601 #端口
server.host: "0.0.0.0" #允许所有外部访问
server.name: "elk" #服务名称
elasticsearch.hosts: ["http://ip:9200"] #所有查询所使用的es实例
i18n.locale: "zh-CN" #界面语言显示为中文
- cd 进入bin目录,启动命令: sh kibana &
- 后台启动: nohup ./bin/kibana &
访问Kibana
在浏览器输入 http://ip:5601
看到kibana界面安装成功
Logstash
安装Logstash
- 使用wget命令下载: wget artifacts.elastic.co/downloads/l…
- 下载完成之后解压 tar -zxvf logstash-7.15.2.tar.gz
- 解压完成删除安装文件 rm -rf logstash-7.15.2.tar.gz
启动Logstash
- 进入logstash配置文件目录 cd logstash-7.5.1/config/
- 编辑logstash.yml配置文件 vim logstash.yml
- 进入bin 目录,新建文件 vim sql.conf 输入如下
-
- input: 数据来源
input {
file {
path => "/home/denghua/mysql/elk.log"
type => "elk"
start_position => beginning
}
}
filter {
}
output {
elasticsearch {
hosts => "localhost:9200"
index => "es-message-%{+YYYY.MM.dd}"
}
stdout{codec => rubydebug}
}
-
-
- log(读取日志)
-
-
-
-
- path:来源日志文件路径
- type:日志分类
-
-
-
-
-
- start_position: 数据读取点,一般从开始读取
-
-
# Sample Logstash configuration for creating a simple
# oracle -> Logstash -> Elasticsearch pipeline.
input {
jdbc {
jdbc_connection_string => "jdbc:oracle:thin:@ip:1521/helowin"
jdbc_user => "user"
jdbc_password => "userpwd"
jdbc_driver_library => "/root/elk/ojdbc14-10.2.0.4.0.jar"
jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
statement => "select * from SYS_OPER_LOG WHERE oper_id > :sql_last_value"
schedule => "* * * * *"
use_column_value => true
tracking_column => "oper_id"
last_run_metadata_path => "/root/elk/logstash-7.15.2/last_run_metadata.txt"
}
}
filter {
json {
source => "message"
remove_field => ["message"]
}
}
output {
elasticsearch{
hosts => "127.0.0.1:9200"
index => "log"
document_id => "%{oper_id}"
}
stdout {
codec => json_lines
}
}
-
-
- jdbc(抽取数据库数据)需要先安装
-
logstash-integration-jdbc
进入bin目录
./logstash-plugin install logstash-integration-jdbc
-
-
-
- jdbc_connection_string: 数据库连接字符串
- jdbc_user: 用户名
-
-
-
-
-
- jdbc_password: 密码
- jdbc_driver_library: Jdbc驱动程序库
-
-
-
-
-
- jdbc_driver_class:JDBC驱动程序类
- schedule: 定时抽取(cron表达式)
-
-
-
-
-
- use_column_value: 是否需要记录某个column 的值,如果 record_last_run 为真,可以自定义我们需要表的字段名称
- tracking_column: 如果 use_column_value 为真,需配置此参数. 这个参数就是数据库给出的一个字段名称。当然该字段必须是递增的,可以是 数据库的数据时间这类的
-
-
-
-
-
- last_run_metadata_path: 上次执行到的 tracking_column 字段的值的保存地址
-
-
-
- out: 数据流向,数据输送到elasticsearch
-
-
- hosts:es地址
- index:目标索引
-
-
-
- stdout:标准输入
-
- 启动logstash,启动命令 sh logstash -f logstashyezi.config &
- 后台启动: nohup ./bin/logstash -f ./config/mysql.conf &
- 在浏览器输入 [http://ip:9600] 看到logstash信息启动成功