ELK日志分析系统-详细教程
转载自 https://www.toutiao.com/article/6858830790927581704
1.docker中安装elasticsearch
我们服务器一般都不要我们安装elasticsearch 别人已经安装好了 我们直接使用就可以了,如果没有安装我们就自己用docker安装一下。
1.拉去镜像
elasticsearch 拉去镜像的名称
7.5.2 :拉取ES版本号
请确保elasticsearch、logstash、kibana三者的版本号尽量一样,否则启动kibana会报错。
1 | docker pull docker.elastic.co /elasticsearch/elasticsearch :7.5.2 |
2.创建容器并启动
-p 9200:9200 -p 9300:9300 宿主机端口:容器端口 左边宿主机右边容器端口进行映射
1 | docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co /elasticsearch/elasticsearch :7.5.2 |
3.修改配置文件
修改配置文件我们可以在创建容器的时候直接指定宿主机和容器进行映射,前提是你已经在宿主机创建了es配置文件,我们这里安装可以直接进入容器进行修改配置文件
进入容器默认就在/usr/share/elasticesarch 我们只需要cd config 目录就行
修改elasticesarch.yml 配置文件
进入容器里面
1 2 | docker exec -it 容器ID /bin/sh vi elasticesarch.yml |
elasticesarch.yml 完整配置
1 2 3 4 5 6 | cluster.name: "docker-cluster" network.host: 0.0.0.0 # 允许任何端口访问 transport.host: 0.0.0.0 #允许跨域,kibana和es-head需要 http.cors.enabled: true http.cors.allow-origin: "*" |
重启完成我们在浏览器用 ip+port 访问
如果能看到这个界面说明我们的elasticesarch安装就成功了
设置密码
1 2 3 4 5 6 7 8 9 | # 开启x-pack vi elasticesarch.yml<br> # 启动安全认证,包括身份验证登录 xpack.security.enabled: true <br> # 启用节点之间传输的SSL/TLS加密通信 xpack.security.transport.ssl.enabled: true # 保存 重启当前容器,然后进入容器执行以下命令 # auto - Uses randomly generated passwords # interactive - Uses passwords entered by a user . /elasticsearch-setup-passwords auto |
修改完成配置文件保存退出,然后回到宿主机重启容器
1 2 | # 修改成功之后记得保存镜像修改,否则重启之后,文件还是之前镜像的状态 docker restart 容器ID |
2.安装logstash
logstash我们这里使用压缩包安装方式,我们只需要下载解压就使用了非常简单。
下载地址:
https://www.elastic.co/cn/downloads/past-releases#logstash
下载以后上传到你要安装的目录解压
1.解压:
如果需要解压指定目录 加 -C参数指定解压,
例如:tar -zxvf logstash-7.0.0.tar.gz -C /user/local
1 | tar -zxvf 名称 |
2.进入解压config目录 修改配置文件
先用cy命令复制出一个.conf文件。不要直接修改原有的配置文件
cp logstash-sample.conf logstahs.conf
我们这里先使用一个最简单的示例,用vim打开logstash.conf文件删除原有的配置信息,粘贴以下内容。
input 是输入源
file 是指在/usr/local/logstash目录下收集所有以.log结尾的日志文件
output 是收集的数据输出到哪里,我们这里指定的是elasticsearch 也就是说会直接保存到es
1 2 3 4 5 6 7 8 9 | input{ file { path => "/usr/local/logstash/*.log" start_position => "beginning" } } output { elasticsearch { hosts =>[ "http://ip:port" ] } } |
3.在logstash/bin目录下创建一个启动脚本
1 2 3 | vim startup.sh // 创建startup.sh nohup . /logstash -f .. /config/logstash .conf & //startup .sh内容 . /startup .sh // 启动 |
启动完成完成以后我们可以在/usr/local/logstash目录下创建一个.log文件如果内容保存到es那说明我们配置没文件。
以上是测试配置,下面我们把配置修改成我们项目对应的配置文件
一下配置我根据我们项目日志文件格式编写的收集规则,并非通用格式。
我们只需要复制配置文件 修改里面的path和elasticsearch 地址就可以了
path 是指我们输出日志存放路径,path 路径可以自己指定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | vim logstash.conf input{ file { path => "/usr/local/weshine-cloud/wshine/zlt-business/logs/application/*.log" type => "sys" exclude => "*.0.log" exclude => "audit.log" start_position => "beginning" } file { path => "/usr/local/weshine-cloud/wshine/zlt-business/logs/audit/audit.log" codec => multiline { pattern => "start:*" negate => true what => "previous" } type => "audit" exclude => "*.0.log" start_position => "beginning" } } filter { if [ type ] == "sys" { multiline { pattern => "^\[\w+-\w+:\d*.\d*.\d*.\d*:\d*\]" negate => true what => "previous" } } if [ type ] == "sys" { grok { match => { "message" => "\[(?<serviceName>[a-z]+-[a-z]+):%{IP:client}:%{NUMBER:port}]\s+(?<Date>(\d*[./-]\d*[./-]\d* \d*:\d*:\d*[.,][0-9]+))\s+%{WORD:debug}\s+%{NUMBER:pid}\s+(?<content>[\w\W]*)" } } } if [ type ] == "audit" { grok { match => { "message" => "[a-z]+:\=+(?<option>[A-Za-z\u4e00-\u9fa5]+)[\=\s\n]+[\u4e00-\u9fa5]+:(?<serverName>[a-z\-]+)[\s\n\u4e00-\u9fa5]+:(?<date>[a-zA-Z\d\-\.:]+)(?<content>[\w\W]*)" } } } mutate { remove_field => "message" } } output { if [ type ] == "sys" { elasticsearch { hosts => [ "http://http://ip:port" ] index => "log-%{serviceName}" } } else if [ type ] == "audit" { elasticsearch { hosts => [ "http://http://ip:port" ] index => "log-audit-%{serverName}" } } stdout { codec => rubydebug } } |
4.安装multiline插件
进入logstash/bin目录下执行一下目录:
1 | . /logstash-plugin install logstash-filter-multiline |
二、multiline 使用方法
1 2 3 4 5 6 7 8 9 10 | codec =>multiline { charset=>... #可选 字符编码 max_bytes=>... #可选 bytes类型 设置最大的字节数 max_lines=>... #可选 number类型 设置最大的行数,默认是500行 multiline_tag... #可选 string类型 设置一个事件标签,默认是multiline pattern=>... #必选 string类型 设置匹配的正则表达式 patterns_dir=>... #可选 array类型 可以设置多个正则表达式 negate=>... #可选 boolean类型 默认false不显示,可设置ture what=>... #必选 向前previous , 向后 next } |
3.安装kibana 展示日志
docker安装Kibana 注:Kibana版本要和Elastic兼容
1 | docker pull kibana:7.5.0 |
在本地创建kibana 配置文件
1 | vim /etc/kibana/config/kibana .yml |
1 2 3 4 5 6 7 | server.name: kibana server.host: "0" elasticsearch.hosts: [ "http://ip:9200" ] #es地址 # 连接es的账号密码 elasticsearch.username: "elastic" elasticsearch.password: "******" xpack.monitoring.ui.container.elasticsearch.enabled: true |
创建容器
1 | docker run --name kibana - v /etc/kibana/config : /usr/share/kibana/config -p 8089:5601 -d kibana:7.5.0 |
启动完成以后用ip+port访问,如果看到这个界面我们就安装完毕了
填入elasticsearch的账号密码:
展示日志文件
点击management
选择索引模式
创建索引模式
输入:log-*匹配所有log-开头日志
下一步
创建索引
然后点击Discover
选择我们创建的索引就可以看到日志了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)