From 0d1f50665a8f85a4e4e0620cd4c196eaf49e06d9 Mon Sep 17 00:00:00 2001 From: Alan Orth Date: Tue, 4 Dec 2018 10:02:51 +0200 Subject: [PATCH] Add notes for 2018-12-04 and regenerate --- content/posts/2018-12.md | 73 +++++++++++++++ docs/2018-11/index.html | 53 ++++++----- docs/2018-12/index.html | 87 +++++++++++++++++- .../2018/12/postgres_connections_db-month.png | Bin 0 -> 11374 bytes docs/sitemap.xml | 12 +-- .../2018/12/postgres_connections_db-month.png | Bin 0 -> 11374 bytes 6 files changed, 195 insertions(+), 30 deletions(-) create mode 100644 docs/2018/12/postgres_connections_db-month.png create mode 100644 static/2018/12/postgres_connections_db-month.png diff --git a/content/posts/2018-12.md b/content/posts/2018-12.md index 2cce254d2..1ccc3043b 100644 --- a/content/posts/2018-12.md +++ b/content/posts/2018-12.md @@ -231,4 +231,77 @@ $ gm convert -resize x600 -flatten -quality 85 cover.png cover.jpg - This has got to be part Ubuntu Tomcat packaging, and part DSpace 5.x Tomcat 8.5 readiness...? +## 2018-12-04 + +- Last night Linode sent a message that the load on CGSpace (linode18) was too high, here's a list of the top users at the time and throughout the day: + +``` +# zcat --force /var/log/nginx/*.log /var/log/nginx/*.log.1 | grep -E "03/Dec/2018:1(5|6|7|8)" | awk '{print $1}' | sort | uniq -c | sort -n | tail -n 10 + 225 40.77.167.142 + 226 66.249.64.63 + 232 46.101.86.248 + 285 45.5.186.2 + 333 54.70.40.11 + 411 193.29.13.85 + 476 34.218.226.147 + 962 66.249.70.27 + 1193 35.237.175.180 + 1450 2a01:4f8:140:3192::2 +# zcat --force /var/log/nginx/*.log /var/log/nginx/*.log.1 | grep -E "03/Dec/2018" | awk '{print $1}' | sort | uniq -c | sort -n | tail -n 10 + 1141 207.46.13.57 + 1299 197.210.168.174 + 1341 54.70.40.11 + 1429 40.77.167.142 + 1528 34.218.226.147 + 1973 66.249.70.27 + 2079 50.116.102.77 + 2494 78.46.79.71 + 3210 2a01:4f8:140:3192::2 + 4190 35.237.175.180 +``` + +- `35.237.175.180` is known to us (CCAFS?), and I've already added it to the list of bot IPs in nginx, which appears to be working: + +``` +$ grep -c -E 'session_id=[A-Z0-9]{32}:ip_addr=35.237.175.180' dspace.log.2018-12-03 +4772 +$ grep -o -E 'session_id=[A-Z0-9]{32}:ip_addr=35.237.175.180' dspace.log.2018-12-03 | sort | uniq | wc -l +630 +``` + +- I haven't seen `2a01:4f8:140:3192::2` before. Its user agent is some new bot: + +``` +Mozilla/5.0 (compatible; BLEXBot/1.0; +http://webmeup-crawler.com/) +``` + +- At least it seems the Tomcat Crawler Session Manager Valve is working to re-use the common bot XMLUI sessions: + +``` +$ grep -c -E 'session_id=[A-Z0-9]{32}:ip_addr=2a01:4f8:140:3192::2' dspace.log.2018-12-03 +5111 +$ grep -o -E 'session_id=[A-Z0-9]{32}:ip_addr=2a01:4f8:140:3192::2' dspace.log.2018-12-03 | sort | uniq | wc -l +419 +``` + +- `78.46.79.71` is another host on Hetzner with the following user agent: + +``` +Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:62.0) Gecko/20100101 Firefox/62.0 +``` + +- This is not the first time a host on Hetzner has used a "normal" user agent to make thousands of requests +- At least it is re-using its Tomcat sessions somehow: + +``` +$ grep -c -E 'session_id=[A-Z0-9]{32}:ip_addr=78.46.79.71' dspace.log.2018-12-03 +2044 +$ grep -o -E 'session_id=[A-Z0-9]{32}:ip_addr=78.46.79.71' dspace.log.2018-12-03 | sort | uniq | wc -l +1 +``` + +- In other news, it's good to see my re-work of the database connectivity in the [dspace-statistics-api](https://github.com/ilri/dspace-statistics-api) actually caused a reduction of persistent database connections (from 1 to 0, but still!): + +![PostgreSQL connections day](/cgspace-notes/2018/12/postgres_connections_db-month.png) + diff --git a/docs/2018-11/index.html b/docs/2018-11/index.html index 205b25ae5..542ec5027 100644 --- a/docs/2018-11/index.html +++ b/docs/2018-11/index.html @@ -21,7 +21,7 @@ Today these are the top 10 IPs: " /> - + @@ -48,9 +48,9 @@ Today these are the top 10 IPs: "@type": "BlogPosting", "headline": "November, 2018", "url": "https://alanorth.github.io/cgspace-notes/2018-11/", - "wordCount": "2698", + "wordCount": "2823", "datePublished": "2018-11-01T16:41:30+02:00", - "dateModified": "2018-11-28T09:32:04+02:00", + "dateModified": "2018-12-04T09:50:36+02:00", "author": { "@type": "Person", "name": "Alan Orth" @@ -156,7 +156,7 @@ Today these are the top 10 IPs:
  • They at least seem to be re-using their Tomcat sessions:
  • -
    $ grep -c -E 'session_id=[A-Z0-9]{32}:ip_addr=84.38.130.177' dspace.log.2018-11-03 | sort | uniq
    +
    $ grep -c -E 'session_id=[A-Z0-9]{32}:ip_addr=84.38.130.177' dspace.log.2018-11-03
     342
     
    @@ -173,7 +173,7 @@ Today these are the top 10 IPs:
  • And it doesn’t seem they are re-using their Tomcat sessions:
  • -
    $ grep -c -E 'session_id=[A-Z0-9]{32}:ip_addr=138.201.52.218' dspace.log.2018-11-03 | sort | uniq
    +
    $ grep -c -E 'session_id=[A-Z0-9]{32}:ip_addr=138.201.52.218' dspace.log.2018-11-03
     1243
     
    @@ -205,14 +205,17 @@ Today these are the top 10 IPs:
      -
    • It’s making lots of requests and using quite a number of Tomcat sessions:
    • +
    • It’s making lots of requests, though actually it does seem to be re-using its Tomcat sessions:
    -
    $ grep -c -E 'session_id=[A-Z0-9]{32}:ip_addr=78.46.89.18' /home/cgspace.cgiar.org/log/dspace.log.2018-11-03 | sort | uniq
    +
    $ grep -c -E 'session_id=[A-Z0-9]{32}:ip_addr=78.46.89.18' dspace.log.2018-11-03
     8449
    +$ grep -o -E 'session_id=[A-Z0-9]{32}:ip_addr=78.46.89.18' dspace.log.2018-11-03 | sort | uniq | wc -l
    +1
     
      +
    • Updated on 2018-12-04 to correct the grep command above, as it was inaccurate and it seems the bot was actually already re-using its Tomcat sessions
    • I could add this IP to the list of bot IPs in nginx, but it seems like a futile effort when some new IP could come along and do the same thing
    • Perhaps I should think about adding rate limits to dynamic pages like /discover and /browse
    • I think it’s reasonable for a human to click one of those links five or ten times a minute…
    • @@ -270,14 +273,17 @@ Today these are the top 10 IPs:
      -
    • 78.46.89.18 is back… and still making tons of Tomcat sessions:
    • +
    • 78.46.89.18 is back… and it is still actually re-using its Tomcat sessions:
    -
    $ grep -c -E 'session_id=[A-Z0-9]{32}:ip_addr=78.46.89.18' dspace.log.2018-11-04 | sort | uniq
    +
    $ grep -c -E 'session_id=[A-Z0-9]{32}:ip_addr=78.46.89.18' dspace.log.2018-11-04
     8765
    +$ grep -o -E 'session_id=[A-Z0-9]{32}:ip_addr=78.46.89.18' dspace.log.2018-11-04 | sort | uniq | wc -l
    +1
     
      +
    • Updated on 2018-12-04 to correct the grep command and point out that the bot was actually re-using its Tomcat sessions properly
    • Also, now we have a ton of Facebook crawlers:
    @@ -302,14 +308,15 @@ Today these are the top 10 IPs:
      -
    • They are really making shit tons of Tomcat sessions:
    • +
    • They are really making shit tons of requests:
    -
    $ grep -c -E 'session_id=[A-Z0-9]{32}:ip_addr=2a03:2880:11ff' dspace.log.2018-11-04 | sort | uniq
    -14368
    +
    $ grep -c -E 'session_id=[A-Z0-9]{32}:ip_addr=2a03:2880:11ff' dspace.log.2018-11-04
    +37721
     
      +
    • Updated on 2018-12-04 to correct the grep command to accurately show the number of requests
    • Their user agent is:
    @@ -342,16 +349,17 @@ Today these are the top 10 IPs:
      -
    • And still making shit tons of Tomcat sessions:
    • +
    • Now at least the Tomcat Crawler Session Manager Valve seems to be forcing it to re-use some Tomcat sessions:
    -
    $ grep -c -E 'session_id=[A-Z0-9]{32}:ip_addr=2a03:2880:11ff' dspace.log.2018-11-04 | sort | uniq
    -28470
    +
    $ grep -c -E 'session_id=[A-Z0-9]{32}:ip_addr=2a03:2880:11ff' dspace.log.2018-11-04
    +37721
    +$ grep -o -E 'session_id=[A-Z0-9]{32}:ip_addr=2a03:2880:11ff' dspace.log.2018-11-04 | sort | uniq | wc -l
    +15206
     
      -
    • And that’s even using the Tomcat Crawler Session Manager valve!
    • -
    • Maybe we need to limit more dynamic pages, like the “most popular” country, item, and author pages
    • +
    • I think we still need to limit more of the dynamic pages, like the “most popular” country, item, and author pages
    • It seems these are popular too, and there is no fucking way Facebook needs that information, yet they are requesting thousands of them!
    @@ -377,19 +385,22 @@ Today these are the top 10 IPs:
  • The file marlo.csv was cleaned up and formatted in Open Refine
  • 165 of the items in their 2017 data are from CGSpace!
  • I will add the data to CGSpace this week (done!)
  • -
  • Jesus, is Facebook trying to be annoying?
  • +
  • Jesus, is Facebook trying to be annoying? At least the Tomcat Crawler Session Manager Valve is working to force the bot to re-use its Tomcat sessions:
  • # zcat --force /var/log/nginx/*.log /var/log/nginx/*.log.1 | grep -E "05/Nov/2018" | grep -c "2a03:2880:11ff:"
     29889
    -# grep -c -E 'session_id=[A-Z0-9]{32}:ip_addr=2a03:2880:11ff' dspace.log.2018-11-05 | sort | uniq
    -29156
    +# grep -c -E 'session_id=[A-Z0-9]{32}:ip_addr=2a03:2880:11ff' dspace.log.2018-11-05
    +29763
    +# grep -o -E 'session_id=[A-Z0-9]{32}:ip_addr=2a03:2880:11ff' dspace.log.2018-11-05 | sort | uniq | wc -l
    +1057
     # zcat --force /var/log/nginx/*.log /var/log/nginx/*.log.1 | grep -E "05/Nov/2018" | grep "2a03:2880:11ff:" | grep -c -E "(handle|bitstream)"
     29896
     
      -
    • 29,000 requests from Facebook, 29,000 Tomcat sessions, and none of the requests are to the dynamic pages I rate limited yesterday!
    • +
    • 29,000 requests from Facebook and none of the requests are to the dynamic pages I rate limited yesterday!
    • +
    • At least the Tomcat Crawler Session Manager Valve is working now…

    2018-11-06

    diff --git a/docs/2018-12/index.html b/docs/2018-12/index.html index d64977f5c..54ad0cc8a 100644 --- a/docs/2018-12/index.html +++ b/docs/2018-12/index.html @@ -21,7 +21,7 @@ I noticed that there is another issue with PDF thumbnails on CGSpace, and I see " /> - + @@ -48,9 +48,9 @@ I noticed that there is another issue with PDF thumbnails on CGSpace, and I see "@type": "BlogPosting", "headline": "December, 2018", "url": "https://alanorth.github.io/cgspace-notes/2018-12/", - "wordCount": "1503", + "wordCount": "1826", "datePublished": "2018-12-02T02:09:30+02:00", - "dateModified": "2018-12-03T13:16:42+02:00", + "dateModified": "2018-12-03T18:28:21+02:00", "author": { "@type": "Person", "name": "Alan Orth" @@ -370,6 +370,87 @@ $ gm convert -resize x600 -flatten -quality 85 cover.png cover.jpg
  • This has got to be part Ubuntu Tomcat packaging, and part DSpace 5.x Tomcat 8.5 readiness…?
  • +

    2018-12-04

    + +
      +
    • Last night Linode sent a message that the load on CGSpace (linode18) was too high, here’s a list of the top users at the time and throughout the day:
    • +
    + +
    # zcat --force /var/log/nginx/*.log /var/log/nginx/*.log.1 | grep -E "03/Dec/2018:1(5|6|7|8)" | awk '{print $1}' | sort | uniq -c | sort -n | tail -n 10
    +    225 40.77.167.142
    +    226 66.249.64.63
    +    232 46.101.86.248
    +    285 45.5.186.2
    +    333 54.70.40.11
    +    411 193.29.13.85
    +    476 34.218.226.147
    +    962 66.249.70.27
    +   1193 35.237.175.180
    +   1450 2a01:4f8:140:3192::2
    +# zcat --force /var/log/nginx/*.log /var/log/nginx/*.log.1 | grep -E "03/Dec/2018" | awk '{print $1}' | sort | uniq -c | sort -n | tail -n 10
    +   1141 207.46.13.57
    +   1299 197.210.168.174
    +   1341 54.70.40.11
    +   1429 40.77.167.142
    +   1528 34.218.226.147
    +   1973 66.249.70.27
    +   2079 50.116.102.77
    +   2494 78.46.79.71
    +   3210 2a01:4f8:140:3192::2
    +   4190 35.237.175.180
    +
    + +
      +
    • 35.237.175.180 is known to us (CCAFS?), and I’ve already added it to the list of bot IPs in nginx, which appears to be working:
    • +
    + +
    $ grep -c -E 'session_id=[A-Z0-9]{32}:ip_addr=35.237.175.180' dspace.log.2018-12-03
    +4772
    +$ grep -o -E 'session_id=[A-Z0-9]{32}:ip_addr=35.237.175.180' dspace.log.2018-12-03 | sort | uniq | wc -l
    +630
    +
    + +
      +
    • I haven’t seen 2a01:4f8:140:3192::2 before. Its user agent is some new bot:
    • +
    + +
    Mozilla/5.0 (compatible; BLEXBot/1.0; +http://webmeup-crawler.com/)
    +
    + +
      +
    • At least it seems the Tomcat Crawler Session Manager Valve is working to re-use the common bot XMLUI sessions:
    • +
    + +
    $ grep -c -E 'session_id=[A-Z0-9]{32}:ip_addr=2a01:4f8:140:3192::2' dspace.log.2018-12-03
    +5111
    +$ grep -o -E 'session_id=[A-Z0-9]{32}:ip_addr=2a01:4f8:140:3192::2' dspace.log.2018-12-03 | sort | uniq | wc -l
    +419
    +
    + +
      +
    • 78.46.79.71 is another host on Hetzner with the following user agent:
    • +
    + +
    Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:62.0) Gecko/20100101 Firefox/62.0
    +
    + +
      +
    • This is not the first time a host on Hetzner has used a “normal” user agent to make thousands of requests
    • +
    • At least it is re-using its Tomcat sessions somehow:
    • +
    + +
    $ grep -c -E 'session_id=[A-Z0-9]{32}:ip_addr=78.46.79.71' dspace.log.2018-12-03
    +2044
    +$ grep -o -E 'session_id=[A-Z0-9]{32}:ip_addr=78.46.79.71' dspace.log.2018-12-03 | sort | uniq | wc -l
    +1
    +
    + +
      +
    • In other news, it’s good to see my re-work of the database connectivity in the dspace-statistics-api actually caused a reduction of persistent database connections (from 1 to 0, but still!):
    • +
    + +

    PostgreSQL connections day

    + diff --git a/docs/2018/12/postgres_connections_db-month.png b/docs/2018/12/postgres_connections_db-month.png new file mode 100644 index 0000000000000000000000000000000000000000..6a9bf25a68896699160a658d72afef228cb6d70e GIT binary patch literal 11374 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 z https://alanorth.github.io/cgspace-notes/2018-12/ - 2018-12-03T13:16:42+02:00 + 2018-12-03T18:28:21+02:00 https://alanorth.github.io/cgspace-notes/2018-11/ - 2018-11-28T09:32:04+02:00 + 2018-12-04T09:50:36+02:00 @@ -199,7 +199,7 @@ https://alanorth.github.io/cgspace-notes/ - 2018-12-03T13:16:42+02:00 + 2018-12-03T18:28:21+02:00 0 @@ -210,7 +210,7 @@ https://alanorth.github.io/cgspace-notes/tags/notes/ - 2018-12-03T13:16:42+02:00 + 2018-12-03T18:28:21+02:00 0 @@ -222,13 +222,13 @@ https://alanorth.github.io/cgspace-notes/posts/ - 2018-12-03T13:16:42+02:00 + 2018-12-03T18:28:21+02:00 0 https://alanorth.github.io/cgspace-notes/tags/ - 2018-12-03T13:16:42+02:00 + 2018-12-03T18:28:21+02:00 0 diff --git a/static/2018/12/postgres_connections_db-month.png b/static/2018/12/postgres_connections_db-month.png new file mode 100644 index 0000000000000000000000000000000000000000..6a9bf25a68896699160a658d72afef228cb6d70e GIT binary patch literal 11374 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 z