ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
### 拓扑图 ### 软件选型 #### 文件数据收集(Filebeat) - Nginx、Tomcat访问日志(Json)(单行) - Nginx错误日志(单行) - Tomcat日志(多行) - JAVA程序日志(单行) - JAVA程序日志(多行) - 系统日志(messages)(单行) - 系统日志(lastlog)(单行) #### 缓冲消息队列(消费) - Redis - Kafka(待补充) #### 数据处理(转发) - Logstash #### 数据检索(存储) - Elasticsearch #### 数据展示 - Kibana ### 基础环境 #### Web01 | 收集对象 | 位置 | | :------------: | :------------: | | 系统日志 | /var/log/messages | | 系统日志 | /var/log/lastlog | | Nginx访问日志 | /usr/local/nginx/logs/*_access.log | | Nginx错误日志 | /usr/local/nginx/logs/error.log | |Tomcat访问日志 |/usr/local/tomcat1/logs/ding_access.*.log | |Java程序输出日志 | /usr/local/tomcat1/logs/ding_Info.log| |Java程序错误日志 | /usr/local/tomcat1/logs/ding_Error.log| #### ELK | 服务 | 配置 | | :------------: | :------------: | | Elasticsearch | /etc/elasticsearch/elasticsearch.yml | | Logstash | /etc/logstash/conf.d/*.conf | | Kibana | /etc/kibana/kibana.yml | #### 硬件配置 ES写入数据时主要消耗CPU和磁盘IP,磁盘越快越好(RAID0或RAID10) Logstash写入数据时,主要消耗CPU #### 常用Logstash插件 - **Json过滤** 处理Nginx、Tomcat已经Json化的访问日志 - **Grok过滤** 处理非结构化的日志,比如IIS日志,MySQL满日志或原始的Nginx日志 - **Mutate过滤** 处理字段的合并、拆解、转换,比如分解Nginx中的request字段,分解为请求方法,请求URL和http版本 - **Geoip过滤** 结合Maxmind的开源GeoLite2数据库,解析IP地址,生成GEO相关字段,用于地图类展示 - **Data过滤** 对时间进行匹配转换 - **Useragent过滤** 拆解日志中的useragent字段 - **Drop过滤** 根据条件,删除数据 ### 已知的问题 #### 1.性能瓶颈 Elasticsearch对磁盘IO要求很高,建议数据放在当读分区中,可以考虑用多块磁盘,建立RAID0或RAID0+1,缓解数据查询缓慢的问题 #### 2.索引的命名规则 Elasticsearch默认会将Geoip过滤后的location字段转换为geo_point类型,但是前提是索引要以logstash-开头,否则不转换 #### 3.字符集乱码 Filebeat中设置encoding:UTF-8 如未使用Filebeat,Logstash设置codec => plain{charset=>"UTF-8"} #### 4.Logstash使用不同的端口,接收不同日志数据 拆分配置文件,避免同一个Logstash配置文件过于庞大 #### 4.一些感悟 1.Nginx的访问日志和Tomcat的访问日志并不能很好的关联 2.动态请求的字符串,在Tomcat中获取